是否允许使用C99中的静态数组初始化静态数组? 例子:在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 All the expressions in an initializer for an object that has static storage duration shall be constant expressions or string literals.
是为const char * const的足够不变? 如果不是,是在什么地方定义了静态变量初始化顺序?
[*“地址常量表达式,为...左值指定静态存储持续时间的对象或一个函数指示符,转换为指针“*”(http://en.cppreference.com/w/c/language/constant_expression) – StoryTeller
问题是“它是否被正式允许?”。它编译并且工作。问题是,我不确定它是否是有效的代码。 – incogn1to
@ incogn1to哪个编译器?哪些选项?对于gcc,我得到'错误:初始化器元素不是常量' – 4386427