gpt4 book ai didi

c - 枚举长度的数组大小给出编译错误

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

看看下面的代码,

这段代码编译得很好:

enum ids {
X,
Y,
NUM_IDS,
}

void some_func(void)
{
static char* const names[NUM_IDS] = { "name X" , "name Y"};
}

但是这段代码无法编译:错误:“名称”的存储大小不是常量

enum ids {
X,
Y,
NUM_IDS,
}

void some_func(void)
{
int nr_names = NUM_IDS;
static char* const names[nr_names] = { "name X" , "name Y"};
}

我想我误解了常量表达式的含义。是否以第二种方式成为 C90 中不存在的 VLA?有人请澄清。

最佳答案

static char* const names[nr_names] 是一个 VLA,因为 nr_names 不是常量表达式,而是一个(非常量)int。当然,在这个简短的示例中,它始终等于 NUM_IDS,但您仍然不能这样做。


在不相关的旁注中,建议将 char 定义为 const,因为修改它不会起作用,因为它是程序二进制文件的一部分(在C++ 它不会让你有它非常量):

static const char* const names[NUM_IDS] = { "name X" , "name Y" };

关于c - 枚举长度的数组大小给出编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905198/

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