如何判断变量内容是否被宏定义?

How can I judge whether the contents of the variable have been macro-defined?

#ifdef可以用来判断一个字符串是否是一个宏定义。但是我有好几个宏定义,怎么判断变量的内容是否已经宏定义了。 例如,

char *str = "Macro"
#ifdef  (*str) 

有没有办法实现类似的功能?

char *str = "Macro"
#ifdef  (*str) 

那是行不通的,因为 str 不是宏! *str 的语法将不会被预处理器接受。顺便说一句:在 C++ 中 char *str = "Macro" 也是错误的,因为你必须使用 const char*!

总的来说:避免使用宏,因为它们容易出错。它们没有类型,它们是某些文本替换功能的一部分,与 C++ 中的类型相去甚远。

how do I judge whether the content of the variable has been macro defined

没有预处理器意义上的variable。而且你不能在预处理器中检查 c++ 变量,因为预处理器根本不了解 C 或 C++。它只是一个或多或少简单的文本替换工具,它在编译器解析 C++ 代码本身之前运行,即使预处理器和 C++ 解析器这两个部分在物理上位于同一程序中。

So what I'm talking about is is there a similar method that can be achieved?

没有!您无法检查变量是否存在。如果它不存在,你总是会得到一个编译错误。您可以检查变量的值或类型,例如使用 SFINAE,但不存在 var 本身。

但真正的用例是什么?你的问题向我们展示了你认为你会如何实现某些东西,而不是为什么和什么?