gpt4 book ai didi

c - 使用 static const 而不是#define 的含义是什么?

转载 作者:太空狗 更新时间:2023-10-29 16:42:49 29 4
gpt4 key购买 nike

gcc 对此提示:

#include <stdio.h>
static const int YY = 1024;
extern int main(int argc, char*argv[])
{
static char x[YY];
}

$ gcc -c 测试1.ctest1.c:在函数 main' 中:
test1.c:5: 错误:
x' 的存储大小不是常量test1.c:5: 错误:变量“x”的大小太大

从 x 的定义中删除“静态”,一切都很好。

我不是很清楚这里发生了什么:肯定 YY 常数吗?

我一直认为“static const”方法比“#define”更可取。在这种情况下有没有办法使用“static const”?

最佳答案

在 C 语言中,const 变量不是“真正的”编译时常量……它实际上只是一个不允许修改的普通变量。因此,您不能使用 const int 变量来指定数组的大小。

现在,gcc 有一个扩展,允许您在运行时指定数组的大小如果数组是在堆栈上创建的。这就是为什么当您从 x 的定义中删除 static 时,代码会编译。然而,这在标准 C 中仍然是不合法的。

解决方案:使用#define

编辑:请注意,这是 C 和 C++ 的不同点。在 C++ 中,const int 是一个真正的编译时常量,可用于指定数组的大小等。

关于c - 使用 static const 而不是#define 的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1476847/

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