[英]Listing C Constants/Macros
有没有办法让GNU C预处理器 ,cpp( 或其他工具 )列出C文件中给定点的所有可用宏及其值?
我正在寻找系统特定的宏,同时移植已经unix精通的程序并加载一堆稀疏的unix系统文件。
只是想知道是否有一种比寻找定义更简单的方法。
我不知道文件中的某个位置,但使用:
$ touch emptyfile
$ cpp -dM emptyfile
转储所有默认值。 对包含一些#include
和#define
行的C文件执行相同操作也包括所有这些。 我想你可以截断你的文件到你关心的地方然后做同样的事情?
从手册页 :
-dCHARS
CHARS
是由以下一个或多个字符组成的序列,不得以空格开头。 其他字符由编译器正确解释,或保留用于GCC的未来版本,因此会被忽略。 如果指定行为冲突的字符,则结果未定义。
M
而不是正常输出,为执行预处理器期间定义的所有宏生成#define
指令列表,包括预定义宏。 这为您提供了一种查找预处理器版本中预定义内容的方法。 假设你没有文件foo.h,那么命令touch foo.h; cpp -dM foo.h
将显示所有预定义的宏。
如果在没有
-E
选项的情况下使用-dM
,则-dM
被解释为-fdump-rtl-mach
的同义词。
D
像M
一样,除了两个方面:它不包括预定义的宏,它输出#define
指令和预处理的结果。 两种输出都转到标准输出文件。
N
像D一样,但只发出宏名称,而不是它们的扩展。
I
除了预处理的结果外,还输出#include
指令。
使用gcc,您可以使用“-dD”选项将所有宏定义转储到stdout。
为什么不查阅Predefined-macros部分 ? 你是否需要这个来建立一个项目或一些这样的东西?
要使用宏列出“它们在C文件中给定点的值”,有两个可以演示C文件中的给定点,特别是在编译时,并且可以被认为对跟踪故障点有用...考虑这个示例代码名为foo.c :
if (!(ptr = malloc(20))){ fprintf(stderr, "Whoops! Malloc Failed in %s at line %d\n", __FILE__, __LINE__); }
如果在该文件中多次使用该代码逻辑,并且对malloc
的调用失败,您将获得此输出:
Whoops! Malloc Failed in foo.c at line 25
根据源中的位置,使用该逻辑,行号将有所不同。 此示例用于显示可以使用该宏的位置...
这是一个页面的链接 ,其中包含命令行选项的概述, 以列出大多数编译器( gcc
, clang
...)的预定义宏 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.