只是风格问题,甚至可能是我不知道的弊端。
我目前正在编写我的第一个软件,将由我以外的人使用和审核。当我编写代码并调用标题时,在文件中多次调用相同的标题是不好的做法。
例如
exampleClass.h
#ifndef BUG_H
#define BUG_H
#include<string>
class Bug{
private:
int bug_id; //6 digit int
Date creation_ts; //Date object containing time of creation
std::string short_desc; //Short description of bug
std::string classification; //Catagory of bug_id
std::string product; //What product is the bug regarding
std::string component
}
#endif
anotherExample.h
#ifndef ANOTHEREXAMPLE_H
#define ANOTHEREXAMPLE_H
#include<string>
class Pug{
private:
int bug_id; //6 digit int
Date creation_ts; //Date object containing time of creation
std::string short_desc; //Short description of bug
std::string classification; //Catagory of bug_id
std::string product; //What product is the bug regarding
std::string component
}
#endif
如果两个文件都有依赖关系,在两个不同的头文件中包含两次字符串有什么问题吗?这会在软件生命的后期引起错误吗?
答案 0 :(得分:2)
如果这两个文件不相关,例如不包含在同一个源中,那么您别无选择。否则,它并不重要,因为如果你将一个文件包含在另一个文件中,那么无论如何都会包括<string>
。其中一个文件仍然需要它。但是,如果一个文件需要一个文件,总是包含它。总有一种情况是有人可能忘记包含其他文件,并且代码不会编译。不要冒险,信任客户。
此外,std::string
也包括警卫,因此无需担心多重包含。此外,为了确保包含,您可以在标题中执行此操作:
#pragma once
#ifndef HEADER_H
#define HEADER_H
//.....Code
#endif
你可以随时#pragma
或#define
,(如1或其他),但两者都保证标题保护,因为旧的编译器不支持#pragma once
答案 1 :(得分:1)
如果两个文件都有依赖关系,在两个不同的头文件中包含两次字符串有什么问题吗?这会在软件生命的后期引起错误吗?
没有。实际上,应该包含您实际依赖的每个头文件。您不应该依赖包含您的依赖项的其他一些标头。它未能包含导致错误的所有标头。如果您的课程需要std::string
,则应该包含<string>
。期。
所有标题都应包含保护(无论是#ifndef
还是#pragma once
种类)。当然,标准库实现中的那些。所以额外包含的缺点只是边际额外的预处理时间,保证编译代码的上行空间。
答案 2 :(得分:1)
如果您在班级中使用string
,则必须加入string
。由于#pragma once
也可以防止多次包含,因此很好。
BTW有一种比ifdefs更好的方法来避免多个包含:
/wp-contents/themes