是否允許使用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