【发布时间】:2016-02-09 20:08:24
【问题描述】:
通常#define 将用于定义常量或宏。但是,以下列方式使用#define 是有效的代码。
#define MAX // does this do anything?
#define MAX 10 // I know how to treat this.
所以,如果我#define MAX 10,我知道我的预处理器将 MAX 的所有实例替换为 10。如果有人单独使用 #define MAX 但没有以下替换值,则它是有效的。这真的有什么作用吗?
我问的原因是我正在用 c++ 为 c 编写一个编译器,并且需要处理预处理器指令,但我无法确定当这种情况发生时是否需要任何功能,或者我只是一旦我的预处理完成,请忽略它。
我的第一反应是,这将在我的符号表中创建一个没有名为 MAX 的值的符号,但同样可能它什么也不做。
作为补充问题,我知道这是一种不好的形式,但我真的很好奇。实际代码中是否存在会使用此类内容的情况?
谢谢, 宾克斯
【问题讨论】:
-
澄清一下,我想知道#define SOMETHING 是如何完全独立工作的,在我的示例代码中,我直接给了它一个值,所以我知道#define MAX 在那个案子。
-
如果你定义了什么,它就会被定义。所以如果你稍后检查它是否定义,你可以找到它是否定义。这就是重点
-
@lol4t0 我看不出这样做的目的,是不是和标识符一样对待?
-
不。定义的名称是预处理器名称。预处理器有自己的范围,只知道/可以检查该范围内的名称
-
你疯了:“我问的原因是我正在用 c++ 为 c 编写编译器并处理预处理器指令”。您需要其他资源,stackoverflow 对此没有好处(除非您找到另一个疯子)。
标签: c++ compiler-construction c-preprocessor