gpt4 book ai didi

C宏展开固定大小的数组声明,用索引后缀重命名每个

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:03 24 4
gpt4 key购买 nike

是否可以定义一个宏INPUT_ARR,这样int a[4]; void (INPUT_ARR(int, a, 4)){} 等于 void (int a0, int a1, int a2, int a3){}

最佳答案

这是一种方法:

#define INPUT_ARR(type, name, count) IARR ## count (type, name)

#define IARR0(type, name)
#define IARR1(type, name) type name##0
#define IARR2(type, name) IARR1(type, name), type name##1
#define IARR3(type, name) IARR2(type, name), type name##2
#define IARR4(type, name) IARR3(type, name), type name##3

void func (INPUT_ARR(int, a, 4)){}

int main()
{
func(1,2,3,4);
}

gcc -E 的结果(不包括 main):

void func (int a0, int a1, int a2, int a3){}

您需要添加 IARR 行直到达到您想要支持的最大数量。不可能有自动进行的递归宏定义。

关于C宏展开固定大小的数组声明,用索引后缀重命名每个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39972347/

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