5.65 C99 のフレキシブル配列メンバ

複数のメンバを持つ struct では、 struct の最後のメンバは、不完全な配列型にすることができます。そのようなメンバは、 struct フレキシブル配列メンバと呼ばれます。

struct にフレキシブル配列メンバが含まれる場合、 struct 全体が不完全な型になります。
フレキシブル配列メンバを使用すると、配列サイズの指定をランタイムまで保留することができるという意味で C の動的型指定を模倣することができます。以下に例を示します。
extern const int n;
typedef struct
{
    int len;
    char p[];
} str;
void foo(void)
{
    size_t str_size = sizeof(str);  // offsetoff(str, p) と等価
    str *s = malloc(str_size + (sizeof(char) * n));
}
関連する概念
5.59 C99 の新しい言語機能
5.61 C99 および C90 の // コメント
5.62 C99 の複合リテラル
5.63 C99 の指定済みのイニシャライザ
5.64 C99 の 16 進浮動小数点数
5.66 C99 の __func__ 定義済み識別子
5.67 C99 の inline 関数
5.68 C99 および C90 の long long データ型
5.69 C99 の使用する引数の数が一定でないマクロ
5.70 C99 の宣言とステートメントの混合
5.71 C99 の選択および反復ステートメントの新しいブロック有効範囲
5.72 C99 の _Pragma 処理命令
5.73 C99 の制限付きポインタ
5.75 C99 の複素数
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.