用宏初始化结构

时间:2017-09-14 11:48:46

标签: c gcc

我正在寻找一种使用宏初始化结构的方法。
我想按照这种方式初始化它。

struct st_test {
  int first;
  int second;
};

STRUCT_INIT (name_of_var) = {.first = 1, .second = 2};

我该怎么做?

我在这里找到答案

#include    <stdio.h>
#include    <stdlib.h>

#define SEC_INIT_FN(type, var,...)              \
    __VA_ARGS__ struct _SIF_ {                  \
        type (* fn) (int i);                    \
    } var;                                      \
static void __sec_init_fn_reg_##var (void)      \
    __attribute__((__constructor__)) ;          \
static void __sec_init_fn_reg_##var (void)      \
{                                               \
    var.fn(10);                                 \
}                                               \
__VA_ARGS__ struct _SIF_ var

void test_fn (int i) {
    printf("Test Function \n");
    printf("%d \n", i);
}

SEC_INIT_FN (void, T) = {.fn = test_fn };

int 
main(void)
{
    printf ("Main Function\n");

    exit(EXIT_SUCCESS);
}

玩得开心:)

2 个答案:

答案 0 :(得分:3)

我真的没有看到你刚刚给出的语法的重点,但是这里有一个应该做类似事情的宏。

#define MY_STRUCT_INIT(var, fst, snd) struct st_test (var) = {.first=(fst),.second=(snd)}

并像这样使用

MY_STRUCT_INIT(pair, 10, 98);

答案 1 :(得分:-1)

没有多大意义,但......(用gcc测试)

#define STRUCT_INIT(s,f1,f2,v1,v2)   struct st_test s = {.f1 = (v1), .f2 = (v2)}

struct st_test {
  int first;
  int second;
};

STRUCT_INIT(name_of_var,first,second,1,2);