所以我一直在研究清理我的代码,并找到了有关在单独的 cpp 文件中定义全局常量(例如 char const* 字符串)的建议,并在标题中声明它们为 extern。然后,您可以在任何需要的地方包含标题,并可以从单个位置访问变量。
例如
字符串.hpp
extern char const* strA;
extern char const* strB;
字符串.cpp
#include "strings.hpp"
char const* strA = "strA";
char const* strB = "strB";
我想这是有道理的,但过了一会儿我突然想到这将导致对项目的大块进行不必要的重新编译。例如,如果我将所有字符串放在一起,那么每当我添加一个新字符串时,我都必须修改标题。这意味着每个包含该头文件的 cpp 文件都将被重新编译。随着项目复杂性的增加,这可能会增加,尽管我不确定这是否会花费很多时间。
在我看来,解决这个问题的方法是保留这个想法,但不是包含标题,而是在一个 cpp 文件中声明和定义常量:
字符串.cpp
extern char const* strA;
extern char const* strB;
char const* strA = "strA";
char const* strB = "strB";
然后在任何需要字符串的文件中,我声明所需的变量
A.cpp
extern char const* strA;
B.cpp
extern char const* strB;
本质上,手动执行包含对我所做的事情。
不同的是,如果我以后需要添加一个char const* strC,在C.cpp中使用,我在strings.cpp中添加extern声明和定义,在C.cpp中再次声明,A.cpp和B.cpp不需要重新编译。
这种方法的缺点是代码重复。我必须在任何我想使用它的地方声明每个变量,而不是声明一次变量并包含声明。这样做的问题是,如果我决定重命名变量,我必须在几个地方重命名它。但是话又说回来,如果我重命名一个变量,我必须修改所有使用它的文件,即使包含声明。无论如何我都可以进行全局重命名。
似乎在进行不影响它们的更改时重新编译多个源文件的时间成本可能比重命名您可能修改或可能不修改的变量的成本要大得多。然而,我从未见过提到的包含声明头的这种缺点。
有什么我想念的吗?