预处理程序指令是否仅适用于它所写的文件?

时间:2013-07-02 16:20:42

标签: c++ c-preprocessor preprocessor-directive

例如:

A.h包含:

#define DRAWING_OBJECTS_COUNT 4

B.h包含:

#include "A.h"
int arrayExample[DRAWING_OBJECTS_COUNT];

当我尝试这个时,控制台会说

DRAWING_OBJECTS_COUNT

在B类中未定义。

让B级知道A级常数的最佳方法是什么? 此外,预处理程序指令是否仅适用于它所写的文件?

2 个答案:

答案 0 :(得分:1)

在发布时,代码应该可以工作(这并不意味着它是好的代码,但)。您的问题可能是循环包含(最有可能),或后续的#undef

  

让B级知道A级常数的最佳方法是什么?

使用const intenum值 - 定义是如此老派。

  

此外,预处理程序指令是否仅适用于它所写的文件?

它取决于 - 如果在文件中定义,它从声明之后起应用于该转换单元 - 这意味着您可以在标头中定义它,并且它将在包含该标头的文件中可见。您还可以使用编译器选项定义预处理程序指令,这使得它们对于编译的所有文件都是可见的。

答案 1 :(得分:0)

预处理器指令不知道范围。 #define之后的每次出现的令牌都将被替换,无论文件,类,等等,直到你得到该{1}}的令牌,或者直到编译器读取所有输入。

如果您想以某种方式表明#undef与A类相关,请在A中将其声明为DRAWING_OBJECTS_COUNTconst int

您是否可以发布确切的错误消息和源代码行,并检查enum s。并确保 包括#undef