我正在寻找一种使用宏初始化结构的方法。
我想按照这种方式初始化它。
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);
}
玩得开心:)
答案 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);