我只在 MSVC 中收到一个奇怪的C代码编译错误。更确切地说:
错误 C2143:语法错误:缺少“;” 在“类型”之前
C2143 是一个相当普遍的错误,围绕它有无数关于 SO 的问题,但到目前为止似乎没有一个问题适用。最接近的可以在这里找到,并强调在块的开头声明变量的重要性,这似乎在这里得到了尊重。
这是一个示例代码:
#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语法。
是吗?