C++ 有没有办法按值搜索宏名称?

C++ 有没有办法按值搜索宏名称?,c++,c,C++,C,感谢@selbie,一个更清楚的问题是 我有一些神奇的数字或字符串需要在代码中引用。很可能其中一个平台头文件已经将该值定义为现有宏。如果是这样的话,我该如何发现具有另一个名称的宏,这样我就不会重复它是另一个名称了 我们知道宏可以在编译时被计算(或者实际上被替换)。所以我想知道是否有任何方法可以通过宏名的值来搜索宏名 这里有一个例子。当我解析USN记录时,我发现驱动程序根目录的FileReferenceNumber总是1407374883553285,所以我想检查它以前是否在XXX.h中定义过,

感谢@selbie,一个更清楚的问题是

我有一些神奇的数字或字符串需要在代码中引用。很可能其中一个平台头文件已经将该值定义为现有宏。如果是这样的话,我该如何发现具有另一个名称的宏,这样我就不会重复它是另一个名称了


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

这里有一个例子。当我解析USN记录时,我发现驱动程序根目录的
FileReferenceNumber
总是
1407374883553285
,所以我想检查它以前是否在XXX.h中定义过,然后我不需要再定义一个


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

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

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


这对
enum
成员值和
constepr
s不起作用。我不认为有任何方法可以搜索那些不涉及使用一些C解析库来构建符号表的代码。这样的库是存在的,但它们不一定文档齐全、稳定或易于使用。

假设您使用的是Microsoft Visual Studio,例如,如果您在IDE中打开项目并将光标放在宏名称上,然后按F12键,它将带您进入定义。这就是你想要的吗?我想你要问的是:
我有一些神奇的数字或字符串需要在代码中引用。很可能其中一个平台头文件已经将该值定义为现有宏。如果是这样的话,我如何发现具有另一个名称的宏,这样我就不会复制它是另一个名称了?
我读对了吗?您不太可能通过值找到它。但在绝望中,您可以在文件中查找1407374883553285,它恰好是0x5000000000005。但它可能由类似于
HIGH_-FIVE | LOW_-FIVE
的东西组成。所以,不……你不太可能按价值找到它。@VicaYang别担心,这是会发生的。我不认为有一个标准的方法来实现这一点,所以您必须寻找允许这种“查找”的特定开发环境@Wyck这正是我所关心的。。这里使用了很多位魔法,因此我想看看是否有任何工具“计算”它给定宏列表,可以编写一组
printf
语句,并使用它们运行程序以查看值(或者,更恰当但更深奥地说,使用GCC的内联汇编和立即操作数,然后生成汇编代码。这具有不需要在目标平台上执行的优点,因此它更容易成为通用生成系统的一部分)。尽管人们希望排除未解析为整数值的宏。