C99 の複合リテラル

ISO C99 は、複合リテラルをサポートしています。複合リテラルは、後にイニシャライザが続くキャストのようなものです。複合リテラルの値はキストで指定された型のオブジェクトで、イニシャライザで指定された要素が含まれています。また、複合リテラルは左辺値です。以下に例を示します。

int *y = (int []) {1, 2, 3};
int *z = (int [3]) {1};

Note

int *y = (int []) {1, 2, 3}; はコンパイラに受け付けられますが、int y[] = (int []) {1, 2, 3}; は高レベル(グローバル)な初期化としては受け付けられません。

以下のソースコード例での複合リテラルは次のとおりです。

struct T
{
   int a;
   char *b;
} t2;

void g(const struct T *t);

void f()
{
   int x[10];

   ...

   t2 = (struct T) {43, "world"};
   g(&(struct T) {.b = "hello", .a = 47});
   g(&(struct T) {43, "bye"});
   memcpy(x, (int[]){1, 2, 3}, 3 * sizeof(int));
}

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0472EJ
Non-ConfidentialID081711