gpt4 book ai didi

c - 是否可以在 C 编译时处理可变参数宏中的每个元素?

转载 作者:行者123 更新时间:2023-12-04 20:26:25 24 4
gpt4 key购买 nike

是否可以以某种方式归档以下内容?我正在使用 gcc。

#define foo(argCount, ...)\
FOR_EACH_IN_VA_ARGS_(argCount, element, __VA_ARGS__)\
{\
printf("%u", sizeof(element));\
}


感谢您的回答。

最佳答案

此答案显示了如何在预处理器中执行 foreach 宏:https://stackoverflow.com/a/51775003/1084774

应用于您的示例,argCount不需要参数,并且有状态版本实际上是不可能的,因为预处理器在定义的和不定义的之外没有可变状态,但是您可以将宏应用到每个版本:

#include "foreach.h" //generated header implementing BX_foreachc
#include <stdio.h>
#define prsz(X) printf("%zu\n", sizeof(X))
#define foo(...) BX_foreach(;,prsz,__VA_ARGS__)

int main(void)
{
foo(char,short,int,long, long long);
//expands to printf("%zu\n", sizeof(char)) ; printf("%zu\n", sizeof(short)) ; printf("%zu\n", sizeof(int)) ; printf("%zu\n", sizeof(long)) ; printf("%zu\n", sizeof(long long));

}

(依赖于链接答案中发布的脚本生成的 foreach.h header )

一种更简单的方法是通过宏参数参数化列表宏:
#include <stdio.h>
#define PRSZ(X) printf("%zu\n", sizeof(X));
#define LIST(_) _(char) _(short) _(int) _(long) _(long long)
int main(void)
{
LIST(PRSZ)
}

这两种方法都是可移植的。

关于c - 是否可以在 C 编译时处理可变参数宏中的每个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60021731/

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