gpt4 book ai didi

C 宏在一个范围内运行循环

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

我有一个包含 10 个元素的数组。将对该元素调用任意函数

每个任意函数都可以

  1. 对单个元素进行操作,或者
  2. 相同的函数将作用于所有元素。

我有很多函数都遵循这种模式。

我正在尝试这样做:

#define ITERATE_ALL10(IDX) (##IDX = 0; ##IDX < 10; ##IDX++)

int arbitrary_fx(int *some_arr, int id) {
int i;

if (id == ID_ALL) {
for (ITERATE_ALL10(i)) {
arbitrary_fx_helper(some_arr[id]);
}
}
else {
arbitrary_fx_helper(some_arr[id]);
}
}

我不知道如何修复这些错误:

expected ';' before ')' token

expected expression before ')' token

我做错了什么?有没有更好的方法来实现我想要的?

最佳答案

您的代码中有两个错误。

首先,您错误地使用了 token 粘贴运算符 ##。此运算符用于粘贴两个 token 以制作一个新 token ,例如foo ## bar 生成 foobar。您的代码中不需要它,只需将其删除即可。

解决此问题后,您的宏如下所示:

#define ITERATE_ALL10(IDX) (IDX = 0; IDX < 10; IDX++)

这是扩展的样子:

for ((i = 0; i < 10; i++)) {

请注意,有一对多余的括号,这会导致编译器失效。要么从宏定义中删除括号:

#define ITERATE_ALL10(IDX) IDX = 0; IDX < 10; IDX++

或从宏调用中删除括号:

for ITERATE_ALL10(i)

我更喜欢前者。

关于C 宏在一个范围内运行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31506254/

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