C99で追加された複合リテラル(compound literal)の有効期間についてメモ。
- ファイルスコープに記述した場合、静的記憶域期間(static storage duration)を持つ。
- ブロックスコープに記述した場合、該当スコープ内でのみ有効となる。
C99 6.5.2.5/p3, 6より引用。
3 If the compound literal occurs outside the body of a function, the initializer list shall consist of constant expressions.
6 The value of the compound literal is that of an unnamed object initialized by the initializer list. If the compound literal occurs outside the body of a function, the object has static storage duration; otherwise, it has automatic storage duration associated with the enclosing block.
関連URL
- DCL21-C. 複合リテラルの記憶域を理解する
- cppreference compound literals