这是语言的限制。第6.7.8/4节:具有静态存储持续时间的对象的初始化程序中的所有表达式都应该是常量表达式或字符串文本。在第6.6节中,规范定义了必须视为常量表达式的内容。它不说明Const变量必须被视为常量表达式。编译器对此进行扩展是合法的(6.6/10 - An implementation may accept other forms of constant expressions但这将限制可移植性。如果你能改变my_foo所以它没有静态存储,您可以:int main(){
foo_t my_foo = foo_init;
return 0;}