因此,我一直在研究清理代码,并找到了有关在单独的cpp文件中定义全局常量(例如,char const *字符串)的建议,并使用 header 将其声明为extern。然后,您可以在需要的地方包括标题,并可以从单个位置访问变量。

例如

strings.hpp

extern char const* strA;
extern char const* strB;

strings.cpp
#include "strings.hpp"

char const* strA = "strA";
char const* strB = "strB";

我认为这是有道理的,但是经过一会儿,我发现这将导致不必要地重新编译项目的大部分内容。例如,如果我将所有字符串都放在一起,则每当添加新字符串时,都必须修改标题。这意味着每个包含该头文件的cpp文件都将被重新编译。随着项目的复杂性增加,这可能会加起来,尽管我不确定是否会花费很多时间。

在我看来,解决此问题的方法是保留该想法,但不要在一个cpp文件中声明并定义常量,而不是包括头文件:

strings.cpp
extern char const* strA;
extern char const* strB;

char const* strA = "strA";
char const* strB = "strB";

然后在需要字符串的任何文件中,声明所需的变量

丙型肝炎
extern char const* strA;

丙型肝炎
extern char const* strB;

本质上,手动执行include将为我完成的工作。

不同之处在于,如果以后需要添加在C.cpp中使用的char const * strC,则可以在string.cpp中添加extern声明和定义,然后在C.cpp,A.cpp和B.cpp中再次声明不需要重新编译。

这种方法的缺点是代码重复。不必一次声明变量并包括声明,而是必须在要使用它的任何位置声明每个变量。这样做的问题是,如果我决定重命名变量,则必须在多个位置重命名。但是再说一次,如果我重命名了一个变量,那么即使包含了声明,我也必须修改所有使用它的文件。而且我仍然可以进行全局重命名。

似乎在进行不影响它们的更改时重新编译几个源文件所花费的时间可能比重命名您可能会或可能不会修改的变量所花费的时间要大得多。但是,我从未见过所提到的包含的声明 header 的负面影响。

我有什么想念的吗?

最佳答案

如果更改字符串,则只需要重新编译该文件即可。添加字符串很昂贵,但是修改字符串非常便宜。另一个好处是您所有的琴弦都在一个地方。如果您决定要更改一个文件,则不必搜索很多文件,也可以翻译程序。

如果您在项目中散布了许多字符串,则可以将它们分组,而不是将它们全部放在同一个标​​题中。还请记住,如果您不使用它们中的任何一个,请不要包含该 header 。

关于c++ - 用extern声明创建头文件有什么意义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18995087/

10-11 22:58
查看更多