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的初始化,应用的就是这种方式。

results matching ""

    No results matching ""