演示代码如下所示:
#include <stdio.h>
#define DEMO(array) demo(array, sizeof(array) / sizeof(array[0]))
typedef struct Demo {
const char *msg;
} Demo;
void demo(Demo list[], size_t list_size) {
for (int i = 0; i < list_size; i++) {
printf("%s\n", list[i].msg);
}
}
int main() {
Demo d[] = {
{"Hello World"},
{"Hello World"}
};
DEMO(d);
}
我想合并main函数中的代码,我想象合并的方式是这样的:
DEMO((Demo []){
{"Hello World"},
{"Hello World"}
});
我记得曾经在一个开源项目中看到过这种语法糖,但我不记得是哪个项目了。
2条答案
按热度按时间jv4diomz1#
你确实可以用一个复合文本参数调用宏,但是你应该在宏定义中更加小心,把扩展中参数的所有示例都括起来,除了函数参数:
sizeof(array[0])
导致参数(Demo[]){{"Hello World"}, {"Hello World"}}
出现语法错误使用发布的定义,您仍然可以使用复合文本调用宏,但必须将其括在括号中以确保正确的计算:
hs1rzwqc2#