感谢@selbie,一个更明确的问题是
我有一些需要在代码中引用的幻数或字符串。平台头文件之一很有可能已经将此值定义为现有宏。如果是这样,我将如何发现另一个名称的宏,这样我就不会再复制另一个名称了?
我们知道宏可以在编译时计算(或实际上替换吗?)。所以我想知道是否有任何方法可以通过其值搜索宏名称?
这里是一个例子。解析USN记录时,我发现驱动程序根目录的FileReferenceNumber
始终为1407374883553285
,因此我想检查一下它是否以前在XXX.h中定义,那么我不需要定义另一个。
顺便说一句,如果我们可以搜索宏,那么constexpr呢?
答案 0 :(得分:3)
如果您使用选项#define
调用它们,Gcc和clang将打印出-E -dM
的列表。 (如果您不使用-E
,则-dM
还会执行其他操作。)
不幸的是,宏替换文本中的宏和算术表达式未展开/评估,因此,只有在知道它的文本表示形式的情况下,才能找到该值。不过,这是第一步。
这不适用于enum
个成员值和constexpr
个成员。我认为没有任何方法可以搜索不涉及使用某些C解析库来构建符号表的方法。这样的库已经存在,但不一定有充分的文档记录,稳定或易于使用。