我有一个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)
我更喜欢前者。