gpt4 book ai didi

c++ - #error inside of#define - 可能在 C++ 中(如果未定义某些常量,则在调用宏 MyMacro 时生成错误)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:35 27 4
gpt4 key购买 nike

我想定义宏,它基于某些条件(#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

但是该代码会生成错误(不是我想要的那个)预期的宏格式参数

请注意,我不想要该代码(工作,但做了一些不同的事情):

#ifdef INITED
#define MyMacro(x) x->method(); //something with x
#else
#error Not initalized!
#endif

上面的代码会在 INITED 未被定义时产生错误。我只想在 调用 MyMacro() 并且尚未定义 INITED 时生成错误

我不是第一个代码的奴隶,但我希望结果完全按照我上面描述的方式工作(generate error WHEN calling macro MyMacro IF constant inited 未定义)。

最佳答案

这是不可能的。预处理器只是一个非常简单的东西,它不会像那样解析嵌套的宏。第二个井号 (#) 不会被预处理器理解为嵌套宏。该参数几乎作为原始字符串处理。

但是,您可以使用 C++11 和 on 而不是 #error 指令来查看静态断言。你会写这样的东西:

#ifdef INITED
#define MyMacro(x) x->method(); //something with x
#else
#define MyMacro(x) static_assert(false, "Not initalized!");
#endif

关于c++ - #error inside of#define - 可能在 C++ 中(如果未定义某些常量,则在调用宏 MyMacro 时生成错误)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23320743/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com