预处理器指令是否仅适用于写入该指令的文件
Does the Preprocessor directives only apply to the file it was written in?
例如:
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 int
或enum
值-定义太过时了。
此外,预处理器指令是否只适用于写入它的文件?
它取决于——如果在文件中定义,它将从声明开始应用于该翻译单元——这意味着你可以在头中定义它,它将在包含该头的文件中可见。您还可以使用编译器选项定义预处理器指令,这使它们对编译的所有文件都可见。
预处理器指令不知道任何作用域。#define之后出现的每一个令牌都将被替换,无论文件、类或其他什么,直到您获得该令牌的#undef
,或者直到编译器读取所有输入。
如果您想指示DRAWING_OBJECTS_COUNT
以某种方式与类A相关,请在A内部将其声明为const int
或enum
。
您能发布准确的错误消息和源代码行,并检查#undef
s吗?并确保您包括A.h
相关文章:
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- C++-更改另一个文件的ASM指令
- 在实现文件中,我们应该更喜欢"using namespace"指令还是将实现包装在命名空间 { } 中?
- C++:包含指令和头文件有什么区别?
- 在C++头文件中放置 using 指令的位置
- 如何使用预处理器指令包含两次具有不同代码的文件?
- 预处理器指令:为什么使用#Define的标题文件标识符与标头文件名不同
- 查找包含指令使用的文件
- #line 指令的 nul.h 文件名的文件路径不正确
- 我需要制作多个可执行文件来针对不同的指令集吗
- 为什么在头文件顶部包含指令
- 使用 std 指令在文本文件中搜索单词
- C++ 提供 SSE 指令,以最快的速度读取文件
- gradle实验通过srcDir-srcFile指令包含文件目录
- 为什么在第三个文件之前写入两个文件,即使指令是每次迭代执行每个文件
- 在实现文件中使用指令
- #include 指令和"using"语句的顺序在C++头文件的开头是否重要?
- 预处理器指令是否仅适用于写入该指令的文件
- 有一个简单的程序文件/程序文件(x86)指令的c++在windows