compound Literals
A compound literals looks like a cast containing an initializer.
compound literals 看起来有点像含有initializer的强制类型。
例如
struct foo {int a; char b[2];} structure;
tructure = ((struct foo) {x + y, 'a', 0});
In (ANSI) C99, you can use a designated initializer to initialize a structure:
MY_TYPE a;
a = (MY_TYPE) { .flag = true, .value = 123, .stuff = 0.456 };
看下面的一段代码 (init_struct_using_macro.c )
//#include<stdio.h>
#define INIT_STU(a) { \
.age=21, \
.name="shaoliming"\
} \
int main()
{
struct Stu{
int age;
char name[20];
};
struct Stu A= INIT_STU(A);
//printf("name: %s,age: %d\n",A.name,A.age);
return 0;
}
可以使用下面两条命令展开宏(macro)
gcc -E init_struct_using_macro.c
或者使用以下命令
cpp init_struct_using_macro.c
结果如下图所示:
在linux内核中,全局的nsproxy的初始化,应用的就是这种方式。