gpt4 book ai didi

c - C 中的错误信息

转载 作者:行者123 更新时间:2023-12-02 05:21:44 25 4
gpt4 key购买 nike

我在编译 C 应用程序时遇到问题,显示的错误毫无意义。我不知道从哪里开始寻找解决方案。

代码如下:

static char* FilterCreate(
void* arg,
const char* const* key_array, const size_t* key_length_array,
int num_keys,
size_t* filter_length) {
*filter_length = 4;
char* result = malloc(4); // error: error C2143: syntax error : missing ';' before 'type' C:\Projects\myleveldb\db\c_test.c
memcpy(result, "fake", 4);
return result;
}

Here是全屏截图: Screenshot

什么可能导致这样的错误?

最佳答案

您正在使用 C89/90 编译器编译 C 代码。

在经典 C (C89/90) 中,在 block 中间声明变量是非法的。所有变量都必须在 block 的开头声明。

一旦您开始编写语句,例如*filter_length = 4,就意味着您完成了声明。您不再允许在此 block 中引入变量声明。将您的声明移到更高的位置,代码将编译。


在 C 语言中,声明 不是声明(与 C++ 相反,声明 只是声明的一种形式>).在 C89/90 中,复合语句的语法是:

compound-statement:
{ declaration-list[opt] statement-list[opt] }

这意味着所有的声明都必须放在第一位,在 block 的开头。

请注意,在 C99 中,声明也不是语句。但复合语句的语法已更改为:

compound-statement:
{ block-item-list[opt] }

block-item-list:
block-item
block-item-list block-item

block-item:
declaration
statement

这就是您可以在 C99 中交错声明和语句的原因。

关于c - C 中的错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11674955/

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