C++ 包含常量而不导入头文件
我有一段设置为获取常量整数参数(问题的维度)的代码,但它可以在许多不同维度上运行C++ 包含常量而不导入头文件,c++,global,shared-memory,C++,Global,Shared Memory,我有一段设置为获取常量整数参数(问题的维度)的代码,但它可以在许多不同维度上运行 我不希望每次运行时都必须更改硬编码维度,理想情况下,我会定义几个基本上只是: #ifndef dim_define_h #define dim_define_h const int dimension = [DIMENSION SPECIFIC TO THIS HEADER FILE]; #endif 然后,在编译时,我可以使用该实例所需的任何头文件,如: g++ dimension_6.h co
我不希望每次运行时都必须更改硬编码维度,理想情况下,我会定义几个基本上只是:
#ifndef dim_define_h
#define dim_define_h
const int dimension = [DIMENSION SPECIFIC TO THIS HEADER FILE];
#endif
然后,在编译时,我可以使用该实例所需的任何头文件,如:
g++ dimension_6.h code.cpp
这可能吗?在头文件中定义一个常量,并在另一个没有显式导入该头文件的文件中使用它
编辑: 我的下一个尝试是仅获取main函数,将其与维度定义一起粘贴到另一个文件中,并复制该文件。然后编译看起来像:
g++ dim_specific_main.cpp lots.cpp more.cpp helpers.cpp
我认为它正在编译main now,它依赖于所有helper文件中定义的helper函数。不幸的是,当它试图编译helper函数时,它需要main.h中定义的常量,而它似乎忘记了它
编辑2:我现在意识到我正试图在编译时需要知道的地方使用这个变量,我认为链接发生在编译之后,所以我不相信这种特殊的方法是可能的
const int dimension = THE_DIMENSION;
然后用
g++ -DTHE_DIMENSION=6 code.cpp
不需要标题
然后用
g++ -DTHE_DIMENSION=6 code.cpp
不需要标题。这并不能解决这个问题,但是包含两个连续下划线(
\uuuu DIM\u DEFINE\u H\uuu
)的名称以及以下划线开头并后跟大写字母的名称保留供实现使用。不要在代码中使用它们。“我不想每次运行时都必须更改硬编码维度”,因此不要硬编码。不幸的是,使代码维度不可知是运行时不可接受的增加。否则我会和你在一起,我知道全局变量和硬编码常量是不好的形式。你有什么证据认为,使维度非硬编码会导致性能问题?不幸的是,实现。这段代码需要适应的时间窗口非常小。我打赌还有其他地方可以优化,但这就是我今天正在研究的地方。这并没有解决这个问题,但是包含两个连续下划线(\uu DIM\u DEFINE\u H\uuu
)的名称和以下划线开头,后跟大写字母的名称保留供实现使用。不要在代码中使用它们。“我不想每次运行时都必须更改硬编码维度”,因此不要硬编码。不幸的是,使代码维度不可知是运行时不可接受的增加。否则我会和你在一起,我知道全局变量和硬编码常量是不好的形式。你有什么证据认为,使维度非硬编码会导致性能问题?不幸的是,实现。这段代码需要适应的时间窗口非常小。我打赌还有其他地方我可以优化,但这是我今天正在做的。这通常是有效的,不幸的是,我处于一个非常严格的环境中,我甚至不能为自动化系统的编译方法添加更多标志。@Emichael编译之前,你能从模板生成头文件吗?我不确定这涉及到什么,你能给我举些例子吗?使用makefile规则从模板文件生成头文件。您可以使用像sed
这样的工具来进行转换。这通常是有效的,不幸的是,我处于一个非常严格的环境中,我甚至不能向自动化系统的编译方法添加更多的标志。@Emichael您能在编译之前从模板生成头文件吗?我不确定这涉及到什么,你能给我举一些例子吗?使用makefile规则从模板文件生成头文件。您可以使用像sed
这样的工具来进行转换。