#define中的#error - 可能在C ++中(生成错误WHEN调用宏MyMacro如果没有定义某个常量)?

时间:2014-04-27 07:49:17

标签: c++ c macros conditional-compilation ifdefine

我想定义宏,基于某些条件(存在#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 未定义)。

1 个答案:

答案 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