struct member' Initializer元素不是编译时常量'

时间:2015-09-15 11:14:56

标签: c struct initializer

struct S {
   int a;
};

int a = ((struct S) {8}).a;

编译器报告错误" Initializer元素不是编译时常量",为什么?

1 个答案:

答案 0 :(得分:5)

因为括号中的结构实际上是一个运行时的东西。您只能在初始化时将常量分配给全局。 e.g。

 int a = 8;

你无法用全局变量做到这一点:

int b = 8;
int a = b; // Because b is a run-time variable

这种技术通常用于定义全局常量:

#define MY_CONSTANT 8
// Then somewhere else you can use it...
int a = MY_CONSTANT;
// or
struct S s = {MY_CONSTANT};