2017-09-14 1 views
0

Je cherche un moyen d'initialiser la structure en utilisant la macro.
Je veux l'initialiser de cette manière.
Initialiser la structure avec la macro

struct st_test { 
    int first; 
    int second; 
}; 

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

Comment puis-je faire cela?

J'ai trouvé réponse ici il est

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

Avoir du bon temps :)

Répondre

3

Je ne vois pas vraiment le point avec la syntaxe que vous venez de donner, mais est néanmoins ici une macro qui devrait faire quelque chose de similaire.

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

et de l'utiliser comme si

MY_STRUCT_INIT(pair, 10, 98); 
-1

ne fait pas trop de sens, mais ... (testé avec 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);