预处理器指令是否仅适用于写入该指令的文件

Does the Preprocessor directives only apply to the file it was written in?

本文关键字:指令 文件 适用于 处理器 是否 预处理      更新时间:2023-10-16

例如:

A.h包含:

#define DRAWING_OBJECTS_COUNT 4

B.h包含:

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

当我尝试这个时,控制台显示

DRAWING_OBJECTS_COUNT

在B类中未定义。

让B类知道A类的常数的最好方法是什么?此外,预处理器指令是否只适用于写入它的文件?

发布时,代码应该可以工作(这并不意味着它是好代码)。您的问题可能是一个循环include(很可能),或后续的#undef

让B类知道A类的常数的最好方法是什么?

请改用const intenum值-定义太过时了。

此外,预处理器指令是否只适用于写入它的文件?

它取决于——如果在文件中定义,它将从声明开始应用于该翻译单元——这意味着你可以在头中定义它,它将在包含该头的文件中可见。您还可以使用编译器选项定义预处理器指令,这使它们对编译的所有文件都可见。

预处理器指令不知道任何作用域。#define之后出现的每一个令牌都将被替换,无论文件、类或其他什么,直到您获得该令牌的#undef,或者直到编译器读取所有输入。

如果您想指示DRAWING_OBJECTS_COUNT以某种方式与类A相关,请在A内部将其声明为const intenum

您能发布准确的错误消息和源代码行,并检查#undef s吗?并确保您包括A.h