我有一个10个元素的数组。将对该元素调用任意函数。
每个任意函数都可以
在单个元件上操作,或
相同的功能将在所有元件上运行。
我有很多遵循这种模式的函数。
我想这样做:

#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

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

最佳答案

代码中有两个错误。
首先,您错误地使用了标记粘贴运算符##此运算符用于粘贴两个令牌以生成新令牌,例如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)

我更喜欢前者。

07-24 09:46
查看更多