Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 包含常量而不导入头文件_C++_Global_Shared Memory - Fatal编程技术网

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
这样的工具来进行转换。