静的配列を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定数*のconstのcharですか? そうでない場合は、静的変数の初期化順序がどこかで定義されていますか?
[* "静的記憶期間のオブジェクトを指す左辺値である定数式、...のアドレスまたはポインタを "*"に変換した関数指定子(http://en.cppreference.com/w/c/language/constant_expression) – StoryTeller
質問は "公式に許可されていますか?"です。それはコンパイルして動作します。問題は、それが有効なコードであることがわかりません。 – incogn1to
@ incogn1toどのコンパイラ?どのオプション? gccで 'error:initializer要素は定数ではありません ' – 4386427