【发布时间】:2013-05-26 18:58:21
【问题描述】:
我收到一个奇怪的编译错误,它仅适用于 MSVC 中的 C 代码。更准确地说:
错误 C2143:语法错误:缺少 ';'在“类型”之前
C2143 是一个相当普遍的错误,围绕它有无数关于 SO 的问题,但到目前为止似乎没有一个问题适用。 最接近的可以是found here,并强调在块的开头声明变量的重要性,这似乎在这里得到了尊重。
这是一个示例代码:
#define NB_LL 6
typedef struct { long long ll[NB_LL ]; } stateSpace_t;
#define ALLOCATE_ONSTACK(stateName) stateSpace_t stateName##_s; void* stateName = (void*) &(stateName##_s);
以下代码运行良好:
void f1()
{
ALLOCATE_ONSTACK(state1);
/* do something */
}
这个没有:
void f2()
{
ALLOCATE_ONSTACK(state1);
ALLOCATE_ONSTACK(state2); // <--- error C2143: syntax error : missing ';' before 'type'
/* do something */
}
第二个代码适用于 GCC,因此问题似乎仅限于 MSVC。
我的理解是宏ALLOCATE_ONSTACK()只做变量声明和初始化,所以它似乎尊重C语法。
是吗?
【问题讨论】:
-
我也可以使用
llvm-gcc。
标签: c visual-studio macros syntax-error c-preprocessor