【发布时间】:2014-01-10 22:19:03
【问题描述】:
有没有一种方法可以强制 C++ 中的预处理器宏发出错误?我想做的是定义一个宏UNKNOWN。我正在为机器人编写一些代码,但我还不知道所有电子设备的插入位置。我希望能够在某些头文件中定义端口,例如
const int MOTOR_PORT = 1;
const int FAN_PORT = 2;
//etc.
但是,当我到达一个我还不知道的端口时,我希望能够编写类似的东西
const int LED_PORT = UNKNOWN;
在调试模式下,UNKNOWN 将被定义为任意值,例如 0。但是,在发布模式下编译时,我希望它在使用 UNKNOWN 时抛出错误,因此未分配的端口不会' t 最终发布。我知道我可以使用#error 指令来强制出错,但是我可以在宏中做类似的事情吗?
我已经看到使用static_assert 的解决方案,但很遗憾我不能在这个平台上使用 C++11。
【问题讨论】:
-
你可以试试
BOOST_STATIC_ASSERT。 -
我没有使用 boost,也不愿意为此添加另一个依赖项。
-
如果您只是省略定义 UNKNOWN 或将其定义为空,则此处的特定代码将无法编译。甚至只是#define UNKNOWN (1/0)
-
理想情况下,我希望保留
#error发出自定义错误消息的能力,而不仅仅是一个不相关的错误。 -
@WilliamKunkel 如果您只需要在使用时出现#error,则无法做到这一点。如果你这样做了
#define FAN_PORT SORRY_THE_FAN_PORT_IS_NOT_AVAILABLE,你可能会强制出现一些描述性的链接错误
标签: c++ debugging macros c-preprocessor