Non-Confidential | ![]() | ARM DUI0472J | ||
| ||||
Home > Compiler Coding Practices > Compound literals in C99 |
ISO C99 supports compound literals. A compound literal looks like a cast followed by an initializer.
Its value is an object of the type specified in the cast, containing the elements specified in the initializer. It is an lvalue.
For example:
int *y = (int []) {1, 2, 3}; int *z = (int [3]) {1};
int *y = (int []) {1, 2, 3};
is accepted by the compiler, but
int y[] = (int []) {1, 2, 3};
is not accepted as a high-level (global)
initialization.
In the following example source code, the compound literals are:
(struct T) { 43, "world"}
&(struct T) {.b = "hello", .a = 47}
&(struct T) {43, "hello"}
(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)); }