gpt4 book ai didi

c 也有 const 值,但它们不能用作数组边界?

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:54 24 4
gpt4 key购买 nike

在“Brian W. Kernighan,Rob Pike 的编程实践”一书中,第 21 页,专家的按钮“将数字定义为常量,而不是宏”,他说“C 也有常量值,但不能使用它们作为数组边界,因此枚举语句仍然是 C 语言中的首选方法。

但这与我的做法有冲突:

    #include <stdio.h>
int main(void)
{
const int bound = 5;
int array[bound];

return (0);
}

可以通过编译。

最佳答案

C also has const values but they connot be used as array bounds

虽然此声明对于 K&R C 和 ANSI C 是正确的,但 C99 标准引入了可变长度数组,使您的声明有效(并且他们关于数组声明中 const 可用性的声明无效)。

使用符合 C99 的编译器,您可以使用任何整型表达式(甚至不是 const 表达式)来声明数组的大小:

int n;
scanf("%d", &n);
if (n <= 0) {
printf("Invalid array size.\n");
return -1;
}
int array[n]; // <<== This is allowed in C99

注意:您的示例使用了 C 的旧规则,根据该规则,没有显式类型声明的变量被视为 intbound 的现代(如“过去二十多年”)声明应如下所示:

const int bound = 5;
// ^^^

关于c 也有 const 值,但它们不能用作数组边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27772343/

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