2017-09-14 63 views
0

我正在尋找一種使用宏初始化結構的方法。
我想按照這種方式初始化它。
使用宏初始化結構

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); 
} 

具有良好的時間:)

回答

3

我實在不明白你只是給了語法點,但儘管如此,這裏是應該做的宏相似的東西。

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

,並使用它像這樣

MY_STRUCT_INIT(pair, 10, 98); 
-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);