清单C常量/宏

ZJR*_*ZJR 9 c gcc c-preprocessor

有没有办法让GNU C预处理器,cpp(或其他工具)列出C文件中给定点的所有可用宏及其值?

我正在寻找系统特定的宏,同时移植已经unix精通的程序并加载一堆稀疏的unix系统文件.

只是想知道是否有一种比寻找定义更简单的方法.

Car*_*rum 15

我不知道文件中的某个位置,但使用:

$ touch emptyfile
$ cpp -dM emptyfile
Run Code Online (Sandbox Code Playgroud)

转储所有默认值.对包含一些#include#define行的C文件执行相同操作也包括所有这些.我想你可以截断你的文件到你关心的地方然后做同样的事情?

手册页:

-dCHARS
CHARS是一个由以下一个或多个字符组成的序列,不得以空格开头.其他字符由编译器正确解释,或保留用于GCC的未来版本,因此会被忽略.如果指定行为冲突的字符,则结果未定义.

M
而不是正常输出,#define为执行预处理器期间定义的所有宏生成一个指令列表,包括预定义的宏.这为您提供了一种查找预处理器版本中预定义内容的方法.假设你没有文件foo.h,那么命令

    touch foo.h; cpp -dM foo.h
Run Code Online (Sandbox Code Playgroud)

将显示所有预定义的宏.

如果您在-dM没有-E选项的情况下使用,则将-dM其解释为同义词-fdump-rtl-mach.

D
就像M除了在两个方面:它不包括预定义宏,并同时输出的#define指令和预处理的结果.两种输出都转到标准输出文件.

N
像D一样,但只发出宏名称,而不是它们的扩展.

I
输出#include指令以及预处理的结果.

  • 在不使用虚拟文件的情况下最快/最简单的方法:`gcc -dM -E - </ dev/null` (5认同)
  • @Paul R:`cpp -dM/dev/null`对我有用......似乎更简单快捷,至少考虑到打字工作...... :-) (2认同)