c - 在C99中用静态变量初始化静态变量

标签 c 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 常量就够了吗? 如果不是,是否在某处定义了静态变量初始化顺序?

最佳答案

在静态区域中,所有变量,如果已初始化,则必须使用整数常量 和其他常量表达式 进行初始化。

其他静态变量的值不被视为常量。

常量是枚举数、原始数字(1、3.1、1e10...)、'c' 字符、字符串文字“常量”、初始化列表,例如 {1,2,3}。

6.7.8 初始化中的语句:

  1. 具有静态存储持续时间的对象的初始化程序中的所有表达式都应为常量表达式或字符串文字。

关于c - 在C99中用静态变量初始化静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41378841/

相关文章:

c++ - 在 Visual Studio 中调试 - 我可以看到英特尔编译器库代码吗?

c - 如何只初始化字符数组的一部分?

c++ - C++14 中的可变长度数组?

包含不同 header 时,C 实现是否可以隐式包含标准 header ?

c - 如何扩展宏中的可变参数?

c - 我应该释放使用字符串文字初始化的 char* 吗?

c - 如何编写系统调用来模拟 `cat/proc/stat` ?

c - OpenMP 任务 - 为什么在 ~10k 的迭代次数较多时会出现段错误?

c - 实体和标识符有什么区别?

使用 MinGW 将旧的 C99 程序转换为 C11