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

noi*_*put 2 c struct initializer

struct S {
   int a;
};

int a = ((struct S) {8}).a;
Run Code Online (Sandbox Code Playgroud)

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

noe*_*cus 5

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

 int a = 8;
Run Code Online (Sandbox Code Playgroud)

你不能用全局变量做到这一点:

int b = 8;
int a = b; // Because b is a run-time variable
Run Code Online (Sandbox Code Playgroud)

通常,此技术用于定义全局常量:

#define MY_CONSTANT 8
// Then somewhere else you can use it...
int a = MY_CONSTANT;
// or
struct S s = {MY_CONSTANT};
Run Code Online (Sandbox Code Playgroud)