【发布时间】:2017-05-13 17:28:17
【问题描述】:
C99允许用静态数组初始化静态数组吗? 示例:
static const char * const PATH1 = "/home/usr";
static const char * const PATH2 = "/usr/";
static const char * const PATH3 = ".";
static const char *path_list[] = {
PATH1,
PATH2,
PATH3,
0
};
int main()
{
char **path = (char **)path_list;
while(*path)
{
printf("path[%s]\n", *path);
path++;
}
return 0;
}
我从 C 标准 §6.7.8 中了解到:
1644 对象的初始化程序中的所有表达式 静态存储时长应为常量表达式或字符串 文字。
const char * const 足够常量吗? 如果不是,是否在某处定义了静态变量初始化顺序?
【问题讨论】:
-
问题是“官方允许吗?”。它确实可以编译并且可以工作。问题是,我不确定这是一个有效的代码。
-
@incogn1to 哪个编译器?哪些选项?使用 gcc 我得到
error: initializer element is not constant -
使用
g++编译时是一个无限循环 -
@4386427 那是因为条件在循环内没有改变。