我想定义宏,基于某些条件(存在#define INITED
,而不是宏的参数)将返回值,或生成编译器的错误,如:
#error Not initialized!
我已尝试过(myIdea.h
):
#ifdef INITED
#define MyMacro(x) x->method(); //something with x
#else
#define MyMacro(x) #error Not initalized!
#endif
但该代码会产生错误(不是我想要的错误)expected macro format parameter
。
请注意,我不想要那些代码(工作,但做的有点不同):
#ifdef INITED
#define MyMacro(x) x->method(); //something with x
#else
#error Not initalized!
#endif
上面的代码只会在INITED未定义时生成错误。我想在调用MyMacro()
时仅生成错误,而尚未定义INITED 。
我不是第一个代码的附属品,但我希望结果完全按照我上面描述的方式工作(生成错误时调用宏 MyMacro IF常量 inited 未定义)。
答案 0 :(得分:6)
这是不可能的。预处理器只是一个非常简单的事情,它不解析那样的嵌套宏。第二磅(#
)不会被预处理器理解为嵌套宏。该参数几乎被处理为原始字符串。
然而,您可以使用C ++ 11而不是#error
指令来查看静态断言。你会写这样的东西:
#ifdef INITED
#define MyMacro(x) x->method(); //something with x
#else
#define MyMacro(x) static_assert(false, "Not initalized!");
#endif