【发布时间】:2023-04-07 21:44:01
【问题描述】:
我的部分代码取决于预处理器符号的值:
int a()
{
#if SDK_VERSION >= 3
return 1;
#else
return 2;
#endif
}
比较取决于 SDK_VERSION 的值。期望为整数或与整数比较的东西,在本例中为 3。如果 SDK_VERSION 是无法与整数比较的东西,则会出现编译错误。
如果 SDK_VERSION 不是预期的类型,有没有办法中止编译?例如:
#if type(SDK_VERSION) != int # Does not compile, I know
#error "SDK_VERSION must be an integer."
#endif
【问题讨论】:
-
错误信息会更晦涩一些,但在包含
SDK的标头中添加类似int ___SDK_VERSION_SHOULD_BE_CONVERTIBLE_TO_INT___ = SDK_VERSION;的内容可能会解决您的问题。 -
如果
SDK_VERSION的类型错误,您说您已经收到编译错误,您想要更好/不同的错误消息吗? -
@FrédéricHamidi:忽略与标识符中的双下划线相关的问题。
-
@Loki,实际上,它们是三个下划线,以防万一:)
-
@FrédéricHamidi:没关系。连续 2 个下划线由实现保留。请参阅stackoverflow.com/a/228797/14065(以下划线和大写字母开头的标识符也是如此)。
标签: c types c-preprocessor