gpt4 book ai didi

c - 仅在 Visual 中出现奇怪的语法错误 C2143(在 ';' 之前缺少 'type')

转载 作者:太空狗 更新时间:2023-10-29 15:20:02 27 4
gpt4 key购买 nike

我在 MSVC 中遇到一个 C 代码的奇怪编译错误。更准确地说:

error C2143: syntax error : missing ';' before 'type'

C2143 是一个相当普遍的错误,围绕它有无数关于 SO 的问题,但到目前为止似乎没有一个适用。最接近的可以是found here , 并强调在 block 的开头声明变量的重要性,这似乎在这里得到了尊重。

这是一个示例代码:

#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 语法。

是吗?

最佳答案

好吧,这个相当复杂。

看看

#define ALLOCATE_ONSTACK(stateName)

它以 ; 字符结尾。

现在看看你的代码:

ALLOCATE_ONSTACK(state1);

它也以 ';' 字符结尾。这意味着,在此特定行上,您有 2 个以下 ';' 字符。

由于 MSVC 不是 C99,它要求所有声明都在 block 的开头完成。由于您有两个 ';' 字符紧随其后,因此声明区域就好像结束了一样。因此,当您在 中声明其他变量时:

ALLOCATE_ONSTACK(state2);

然后失败,语法错误。

GCC 没有这样的问题,因为它是 C99。

删除宏末尾或源代码中的 ';' 字符。只需要一个。不确定哪种解决方案更好...

[编辑]:正如评论和其他答案中所建议的那样,从宏中删除分号看起来是更好的解决方案。

关于c - 仅在 Visual 中出现奇怪的语法错误 C2143(在 ';' 之前缺少 'type'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16849077/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com