Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Init静态变量与C99中的静态变量_C_C99 - Fatal编程技术网

Init静态变量与C99中的静态变量

Init静态变量与C99中的静态变量,c,c99,C,C99,是否允许在C99中使用静态数组初始化静态数组? 例如: 正如我从C标准§6.7.8中了解到的: 1644初始值设定项中具有 静态存储持续时间应为常量表达式或字符串 文字 常量字符*常量足够吗? 如果没有,是否在某个地方定义了静态变量初始化顺序 变量的值始终被视为“运行时”,而静态或全局变量的初始值设定项必须是“编译时”。所以你写的东西行不通。当然,您可以使用预处理器: #define C_PATH1 "/home/usr" #define C_PATH2 "/usr/" #define C_PA

是否允许在C99中使用静态数组初始化静态数组? 例如:

正如我从C标准§6.7.8中了解到的:

1644初始值设定项中具有 静态存储持续时间应为常量表达式或字符串 文字

常量字符*常量足够吗?
如果没有,是否在某个地方定义了静态变量初始化顺序

变量的值始终被视为“运行时”,而静态或全局变量的初始值设定项必须是“编译时”。所以你写的东西行不通。当然,您可以使用预处理器:

#define C_PATH1 "/home/usr"
#define C_PATH2 "/usr/"
#define C_PATH3 "."

static const char * const PATH1 = C_PATH1;
static const char * const PATH2 = C_PATH2;
static const char * const PATH3 = C_PATH3;

static const char *path_list[] = {
    C_PATH1,
    C_PATH2,
    C_PATH3,
    0
};  

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

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

常量是枚举数、原始数字(1、3.1、1e10…)、c字符、字符串文字“常量”、初始值设定项列表,如{1,2,3}

来自
6.7.8初始化的语句

  • 具有静态存储持续时间的对象的初始值设定项中的所有表达式应为常量表达式或字符串文字。

  • 问题是“正式允许吗?”。它可以编译和工作。问题是,我不确定它是否是一个有效的代码。@incogn1到哪个编译器?哪些选项?对于gcc,我得到了
    错误:当使用
    g++
    编译时,初始值设定项元素不是常量loop@4386427这是因为条件在循环内不会改变。
    #define C_PATH1 "/home/usr"
    #define C_PATH2 "/usr/"
    #define C_PATH3 "."
    
    static const char * const PATH1 = C_PATH1;
    static const char * const PATH2 = C_PATH2;
    static const char * const PATH3 = C_PATH3;
    
    static const char *path_list[] = {
        C_PATH1,
        C_PATH2,
        C_PATH3,
        0
    };