簡體   English   中英

在C99中使用靜態變量初始化靜態變量

[英]Init static variable with static variable in 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具有靜態存儲持續時間的對象的初始化程序中的所有表達式都應為常量表達式或字符串文字。

const char * const是否足夠恆定? 如果不是,是否在某處定義了靜態變量初始化順序?

在靜態區域中,所有變量(如果已初始化)都必須使用Integer constants和其他constant expressions進行初始化。

其他靜態變量的值不視為常量。

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

6.7.8 Initialization聲明:

  1. All the expressions in an initializer for an object that has static storage duration shall be constant expressions or string literals.

變量的值將始終被視為“運行時”,而靜態或全局變量的初始化程序必須為“編譯時”。 所以你寫的東西行不通。 您當然可以使用預處理器:

#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
};  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM