gpt4 book ai didi

c - 可选的初始化程序,通过预处理器欺骗?

转载 作者:行者123 更新时间:2023-12-02 09:00:42 25 4
gpt4 key购买 nike

我知道这行不通,但希望你能看到我正在尝试做的事情

#if ASSIGN_ALLOWED
#define MAYBE_SKIP_REST_OF_LINE
#else
#define MAYBE_SKIP_REST_OF_LINE ; //
#endif

char str[80] MAYBE_SKIP_REST_OF_LINE = "Hello\n";
long array[3] MAYBE_SKIP_REST_OF_LINE = { 7,8,9 };
int x MAYBE_SKIP_REST_OF_LINE = 3;
//...many many more similar lines...

有没有一种方法可以做到这一点?

最佳答案

当然:

#ifdef ASSIGN_ALLOWED
#define OPTIONAL_INITIALISER(x) = x
#else
#define OPTIONAL_INITIALISER(x)
#endif

char str[80] OPTIONAL_INTIALISER("Hello\n");
#define ARRAY_INIT { 7,8,9 }
long array[3] OPTIONAL_INITIALISER(ARRAY_INIT);
#undef ARRAY_INIT
int x OPTIONAL_INITIALISER(3);

任何包含逗号的初始化器,例如示例中的 array,都需要从它们自己的宏中扩展,例如上面的 ARRAY_INIT。如果你的编译器支持 C99 varargs 宏,那么你可以用更简洁的方式来做:

#ifdef ASSIGN_ALLOWED
#define OPTIONAL_INITIALISER(...) = __VA_ARGS__
#else
#define OPTIONAL_INITIALISER(...)
#endif

char str[80] OPTIONAL_INTIALISER("Hello\n");
long array[3] OPTIONAL_INITIALISER({ 7,8,9 });
int x OPTIONAL_INITIALISER(3);

关于c - 可选的初始化程序,通过预处理器欺骗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1497628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com