我有一个颜色代码数组,其大小在编译时已知。 我想声明另一个相同大小的数组。 但下面的代码会抛出错误。
当然,我可以将大小声明为全局常量,然后在两个数组的声明中使用它。 但当我添加新颜色时,我不想继续调整尺寸不变。 有办法做到这一点吗? (变量是全局的。)
static const char *colors[] = {"#0000ff",
"#00ff00",
"#ff0000",
"#ffff00",
"#ff00ff",
"#00ffff",
"#ffffff",
"#000000",
"#ff8040",
"#c0c0c0",
"#808080",
"#804000"};
static const int NUM_COLORS = sizeof(colors) / sizeof(colors[0]);
static ColorButtons color_buttons[NUM_COLORS];
文件作用域数组的大小(如果指定)必须是整数常量表达式。 用
const
限定的变量不符合表达式之类的条件。
不要将
NUM_COLORS
设为变量,而是将其设为预处理器符号:
#define NUM_COLORS (sizeof(colors) / sizeof(colors[0]))
扩展为 的表达式是 一个整型常量表达式,因此可以用作数组的大小。