スコープ/関数の中に入れたときに次のコードをコンパイルすることはできません。コンパイラは、initializer element is not constant
の行に何かを示すエラーを生成します。これはGCCとMSVCで発生します。 コンパウンドリテラルで変数を初期化する
static const char *const *const list = (const char *const[]){"abc", "def", "xyz"};
しかし、コードは静的記憶域期間を持つグローバル変数として任意の関数の外に置かれ、
list
が初期化されると、コードは罰金コンパイルし、警告またはエラーを生成しません。
list
が非静的である場合にのみ、スコープ/関数内で初期化することもできます。
cppreference docsから次の引用は、私の目を引いています
場合複合リテラルは、ファイルスコープと 自動記憶域期間に発生した場合、化合物リテラル評価するには、静的 記憶域期間を持つに無名のオブジェクトをコンパウンドリテラルは、ブロック スコープで発生します(この場合、オブジェクトの有効期間は、ブロックを囲む の終わりで終了します)。
これは、静的な記憶期間を持つローカル変数を複合リテラルで初期化することはできないと言うことはできますか?