繁体   English   中英

清单C常量/宏

[英]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

根据源中的位置,使用该逻辑,行号将有所不同。 此示例用于显示可以使用该宏的位置...

这是一个页面的链接 ,其中包含命令行选项的概述, 以列出大多数编译器( gccclang ...)的预定义宏

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM