【发布时间】:2017-10-08 22:36:37
【问题描述】:
纯C,部分代码来自here
#define _CAT(a, ...) a ## __VA_ARGS__
#define SWITCH_ENABLED_0 0
#define SWITCH_ENABLED_1 1
#define SWITCH_ENABLED_ 1
#define ENABLED(b) _CAT(SWITCH_ENABLED_, b)
// problem in this string if SOMETHING is not defined
#if ENABLED(SOMETHING)
int tmp;
#endif
此代码适用于 gcc,但在 MS Visual Studio 2010 中,它为 VS 2017 提供“错误 C2059:语法错误:'数字后缀错误'”和“致命错误 C1017 - 无效的整数常量表达式”。
如何修改代码使其适用于 gcc 和 VS?
如果不可能,VS 的模拟代码怎么办?类似的东西
#define ENABLED(X) #if defined(X) && #if X
【问题讨论】:
-
你应该指定错误对应的行号
-
#if ENABLED(SOMETHING) 行中的错误 // 问题
-
你需要无后缀的
SWITCH_ENABLED_宏吗? -
C99 引入了可变参数宏,AFAIK VS 2010 不支持大多数 C99 功能。
-
visual-studio-2017 标签是干什么用的?
标签: c visual-studio-2010 gcc visual-studio-2017 c-preprocessor