gpt4 book ai didi

c - 错误 : variable-sized object may not be initialized in c language. 与常量 int 有什么关系吗?

转载 作者:行者123 更新时间:2023-12-02 08:03:05 26 4
gpt4 key购买 nike

这是我教科书中的一个例子,但是当我尝试运行它时它说错误。我不明白问题出在哪里。

const int n=20, d=11; 
int pergjigjet[n]={1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7};
int denduri[ d ]={0};

for( int p=0; p<n; p++)
++denduri[pergjigjet[p]];

printf("vleresimi\tdenduria\n");
for(int v=1; v<d; v++)
printf("%d\t\t\%d\n", v, denduri[v]);

它显示的错误:

Compilation failed due to following error(s). main.c: In function ‘main’:
main.c:15:5: error: variable-sized object may not be initialized
int pergjigjet[n]={1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7};
^
main.c:15:24: warning: excess elements in array initializer
int pergjigjet[n]={1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7};
^

最佳答案

这本教科书有误;代码无效 C.

根据 6.7.9 初始化,¶3:

The type of the entity to be initialized shall be an array of unknown size or a complete object type that is not a variable length array type.

数组 pergjigjet 是可变长度数组,因为元素数量的表达式 n 不是整数常量表达式 . const 限定的对象不是常量;它们只是对象,修改它们的尝试要么是(取决于使用的方法)违反约束要么是未定义的行为。

您可以通过将 const int n=20, d=11; 替换为 enum { n=20, d=11 }; 或使用预处理器宏来修复它(#define n 20) 但这通常被认为是糟糕的风格。

正如 Mike Christensen 在评论中指出的那样,这本教科书似乎相当糟糕。很可能作者实际上是用 C++ 的类 C 子集而不是 C 编写的。此代码在 C++ 中有效,因为在 C++ 中,这样的 n 是常量。

关于c - 错误 : variable-sized object may not be initialized in c language. 与常量 int 有什么关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54619758/

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