Gcc 是否要查看预处理器定义的宏列表?

Gcc 是否要查看预处理器定义的宏列表?,gcc,macros,c-preprocessor,codesourcery,Gcc,Macros,C Preprocessor,Codesourcery,我希望看到通过调用我正在使用的编译器定义的所有宏。有没有办法做到这一点?我在手册中看到,它说您可以使用cpp-dM,但这对我不起作用。也许我做错了什么 当我跑步时: cpp -dM 我没有从预处理器得到任何输出。如果我尝试在gcc上添加-dM作为选项,我没有注意到任何区别。默认情况下,cpp-dM将从标准输入读取其输入文件,并写入标准输出。由于您没有尝试预处理任何输入,因此可以使用/dev/null将空输入传递给它: # Option 1 cpp -dM < /dev/null # Op

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

当我跑步时:

cpp -dM

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

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

# Option 1
cpp -dM < /dev/null
# Optio n2
cpp -dM /dev/null
#选项1
cpp-dM
在Windows上,您可以使用
NUL
伪文件而不是
/dev/null

您可以使用:

gcc -dM -E - < /dev/null
例如,在我的计算机上:

$ touch bla.c && gcc -dM -E bla.c | wc -l
486
$ gcc -dM -E - < /dev/null | wc -l
124
$
$touch bla.c&&gcc-dM-E bla.c | wc-l
486
$gcc-dM-E-
“不适合我”-请更详细地描述!在我的Linux计算机上,
cpp-dM
的输出是
124
,因此有124个预定义值
cpp-dM
向我展示了它们是什么。这些命令在您的计算机上的输出是什么?抱歉,我试图稍微清除一下。谢谢。我必须尝试并找出如何在windows上执行此操作,不幸的是,我一直在使用windows。我正在使用arm的代码源代码交叉编译器。(本质上是一个gcc端口)还有
-xc
-xc++
-std=…
等功能,因此您可以比较特定语言和方言definitions@Christoph实际上,对于第二个示例,我首先尝试了
gcc-xc-dM-E-
,但这似乎不适用于
-dM
(与第一个示例中的结果相同)@Christoph ok,因此它已被修复,因为它不在我的gcc-4.4.3/Linux上
$ touch bla.c && gcc -dM -E bla.c | wc -l
486
$ gcc -dM -E - < /dev/null | wc -l
124
$