c – 当给定宏/预处理器符号被声明时,如何知道(在GCC中)?

前端之家收集整理的这篇文章主要介绍了c – 当给定宏/预处理器符号被声明时,如何知道(在GCC中)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有#define foo在各种头文件.它可能扩展到一些不同的东西.我想知道(当编译一个.cc文件)遇到一个#define,它会扩展,它是哪个文件和它包含在哪里.

可能吗?如果没有,是否有任何可能有帮助的部分解决方案?

随意添加评论与澄清请求.

编辑:目前的答案似乎集中在案例当有一个#define,我只想跳到定义或知道什么是定义.这是简单的案例,是的,您的解决方案可以正常工作.但是当我在不同的文件中使用相同的#define,并且想要知道哪一个在首先启动时,这些技术都不是有用的.好的,我实际上使用#warning仔细找到正确的地方.但这需要很多工作.

解决方法

你看 : @H_404_12@# shows preprocessed source with cpp internals removed g++ -E -P file.cc # shows preprocessed source kept with macros and include directives g++ -E -dD -dI -P file.cc

上面的内部是gcc的线标记,当您读取输出时有点混淆. -P剥他们

@H_404_12@ -E Stop after the preprocessing stage; do not run the compiler proper. The output is in the form of preprocessed source code,which is sent to the standard output. Input files which don't require preprocessing are ignored.

注意:评论正确抱怨这只是一个部分解决方案.当宏将被替换时,它不会告诉你.它显示您的预处理源,这可能是有帮助的.

猜你在找的C&C++相关文章