const static int数组

时间:2015-07-09 09:28:37

标签: c arrays compiler-errors initialization const

标题中有变量:

const static int RED = 0;
const static int BLUE = 1;
const static int GREEN = 5;
const static int DOG = 8;
const static int CAT = 9;
const static int SNAKE = 7;

如何创建全局数组并使用这些const变量的值初始化它们?

我试过了:

const static int color[3] = {BLUE, GREEN, DOG};
const static int animal[3] = {DOG, CAT, SNAKE};

但是编译器说错误:

  

初始化元素不是常量

(我需要创建一些我可以循环的结构。)

2 个答案:

答案 0 :(得分:1)

C中,使用const不会使变量成为编译时常量。它被称为const qualified.因此,您不能使用const变量来初始化全局范围内的另一个变量。

相关,来自C11,章节§6.7.9,初始化

  

具有静态或线程存储持续时间的对象的初始值设定项中的所有表达式   应该是常量表达式或字符串文字。

因此,为了完成工作,您可以将REDBLUE作为MACRO(使用#define),或者使用枚举,将这些标识符名称作为枚举常量

答案 1 :(得分:1)

您可以做的是定义它们,因此值在编译时时保持不变:

#define RED 0
#define BLUE 1
#define GREEN 5

const static int color[3] = {BLUE, GREEN, DOG};

或者您可以在运行时设置数组中的所有元素:

const static int color[3];
color[0] = BLUE;
color[1] = GREEN;
color[2] = DOG;

for(i = 0; i < 3; i++){ 
  if(color[i] == BLUE)
     printf("\nColor nr%d is blue", i);
}