【发布时间】:2018-04-26 02:23:25
【问题描述】:
以下代码在放入作用域/函数时无法编译,编译器将产生错误,说明类似于:initializer element is not constant。这发生在 GCC 和 MSVC 上。
static const char *const *const list = (const char *const[]){"abc", "def", "xyz"};
但是当代码放在任何函数之外并且list 被初始化为具有静态存储持续时间的全局变量时,代码编译良好并且不会产生任何警告或错误。只有当list 是非静态时,它也可以在作用域/函数内进行初始化。
cppreference docs 的以下引用引起了我的注意:
复合字面量求值的未命名对象具有静态 如果复合文字出现在文件范围内,则存储持续时间,并且 如果复合文字出现在块中,则自动存储持续时间 范围(在这种情况下,对象的生命周期在 封闭块)。
这是否意味着可以肯定地说具有静态存储持续时间的局部变量不能用复合文字初始化?
【问题讨论】:
标签: c gcc visual-c++ c99