【问题标题】:Anyway to see list of preprocessor defined macros?无论如何要查看预处理器定义的宏列表?
【发布时间】:2012-06-09 22:01:00
【问题描述】:

我想查看由我正在使用的编译器调用定义的所有宏。有没有办法做到这一点?我在手册中看到它说您可以使用cpp -dM,但这对我不起作用。也许我做错了什么?

当我跑步时:

cpp -dM

我没有从预处理器得到任何输出。如果我尝试在 gcc 上添加 -dM 作为选项,我不会发现任何区别。

【问题讨论】:

  • “不适合我”——请描述得更详细些!
  • 在我的Linux电脑上,cpp -dM < /dev/null | wc -l的输出是124,所以有124个预定义值。 cpp -dM < /dev/null | less 告诉我它们是什么。这些命令在您的计算机上的输出是什么?
  • 抱歉,我想稍微澄清一下
  • Rob 谢谢你,我将不得不尝试弄清楚如何从 Windows 中做到这一点,不幸的是我被困住了。我正在为 arm 使用代码源交叉编译器。 (本质上是一个 gcc 端口)

标签: gcc macros c-preprocessor codesourcery


【解决方案1】:

你可以使用:

gcc -dM -E - < /dev/null

请注意,您还可以使用以下命令获取编译器宏:

touch bla.c && gcc -dM -E bla.c

例如在我的电脑上:

$ touch bla.c && gcc -dM -E bla.c | wc -l
486
$ gcc -dM -E - < /dev/null | wc -l
124
$

【讨论】:

  • -xc-xc++-std=... 也很有用,因此您可以比较语言和特定方言的定义
  • @Christoph 实际上我在第二个示例中首先尝试了gcc -xc -dM -E - &lt; /dev/null,但这似乎不适用于-dM(与第一个示例中的结果相同)
  • @Christoph 好的,所以它已被修复,因为它不在我的 gcc-4.4.3/Linux 上
【解决方案2】:

默认情况下,cpp -dM 将从标准输入读取其输入文件并写入标准输出。由于您没有尝试预处理任何输入,因此您可以使用 /dev/null 将空输入传递给它:

# Option 1
cpp -dM < /dev/null
# Optio n2
cpp -dM /dev/null

在 Windows 上,您可以使用 NUL 伪文件代替 /dev/null

【讨论】:

    猜你喜欢
    • 2011-02-12
    • 2019-10-17
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2011-12-11
    • 2021-12-29
    相关资源
    最近更新 更多