有什么方法可以通过值搜索宏名称?

时间:2018-12-05 03:06:09

标签: c++ c

感谢@selbie,一个更明确的问题是

  

我有一些需要在代码中引用的幻数或字符串。平台头文件之一很有可能已经将此值定义为现有宏。如果是这样,我将如何发现另一个名称的宏,这样我就不会再复制另一个名称了?


我们知道宏可以在编译时计算(或实际上替换吗?)。所以我想知道是否有任何方法可以通过其值搜索宏名称?

这里是一个例子。解析USN记录时,我发现驱动程序根目录的FileReferenceNumber始终为1407374883553285,因此我想检查一下它是否以前在XXX.h中定义,那么我不需要定义另一个。

顺便说一句,如果我们可以搜索宏,那么constexpr呢?

1 个答案:

答案 0 :(得分:3)

如果您使用选项#define调用它们,Gcc和clang将打印出-E -dM的列表。 (如果您不使用-E,则-dM还会执行其他操作。)

不幸的是,宏替换文本中的宏和算术表达式未展开/评估,因此,只有在知道它的文本表示形式的情况下,才能找到该值。不过,这是第一步。

这不适用于enum个成员值和constexpr个成员。我认为没有任何方法可以搜索不涉及使用某些C解析库来构建符号表的方法。这样的库已经存在,但不一定有充分的文档记录,稳定或易于使用。