无论如何要查看预处理器定义的宏列表?

Bra*_*tes 10 macros gcc codesourcery c-preprocessor

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

当我跑:

cpp -dM
Run Code Online (Sandbox Code Playgroud)

我从预处理器中得不到任何输出.如果我尝试-dM在gcc上添加选项,我没有注意到任何差异.

oua*_*uah 12

您可以使用:

gcc -dM -E - < /dev/null
Run Code Online (Sandbox Code Playgroud)

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

touch bla.c && gcc -dM -E bla.c
Run Code Online (Sandbox Code Playgroud)

例如在我的电脑上:

$ touch bla.c && gcc -dM -E bla.c | wc -l
486
$ gcc -dM -E - < /dev/null | wc -l
124
$
Run Code Online (Sandbox Code Playgroud)

  • 也有用的是`-xc`,`-xc ++`和`-std = ...`所以你可以比较语言和特定于方言的定义 (3认同)

Ada*_*eld 5

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

# Option 1
cpp -dM < /dev/null
# Optio n2
cpp -dM /dev/null
Run Code Online (Sandbox Code Playgroud)

在Windows上,您可以使用NUL伪文件而不是/dev/null.