如何判断变量内容是否被宏定义?
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 本身。
但真正的用例是什么?你的问题向我们展示了你认为你会如何实现某些东西,而不是为什么和什么?
#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 本身。
但真正的用例是什么?你的问题向我们展示了你认为你会如何实现某些东西,而不是为什么和什么?