【发布时间】:2013-05-03 10:36:23
【问题描述】:
当我通过 Makefile 添加宏时,我有一段第三方代码的工作方式不同,例如-DMacro 而不是在顶级头文件中执行 #define MACRO
(正如他们的文档所暗示的,这包含在所有文件中)。
如果以不同的方式定义它是否有任何差异,我在 Google 上搜索,但除了 Precedence of -D MACRO and #define MACRO 之外,我想不出太多。
在开始调试和确定问题之前,我想知道是否遗漏了有关制作文档/C 标准的任何内容。
感谢您的任何回答。
【问题讨论】:
-
编译行上的
-D和头文件中的#define之间的区别在于(a)它是为所有编译定义的,而头文件可能不包含在所有源文件中,并且( b) 在每个源文件处理开始之前在之前定义。#define出现的顺序(在其他头文件之前或之后等)很容易对预处理器处理代码的方式产生很大影响。您可以使用编译器的-E标志(大多数编译器支持它)或类似的来显示预处理输出并进行比较。