在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 常量就够了吗? 如果不是,是否在某处定义了静态变量初始化顺序?
最佳答案
在静态区域中,所有变量,如果已初始化,则必须使用整数常量
和其他常量表达式
进行初始化。
其他静态变量的值不被视为常量。
常量是枚举数、原始数字(1、3.1、1e10...)、'c' 字符、字符串文字“常量”、初始化列表,例如 {1,2,3}。
6.7.8 初始化
中的语句:
具有静态存储持续时间的对象的初始化程序中的所有表达式都应为常量表达式或字符串文字。
关于c - 在C99中用静态变量初始化静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41378841/