use*_*449 1 c macros c-preprocessor
我有一个包含 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]);
}
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何修复错误:
expected ';' before ')' token
Run Code Online (Sandbox Code Playgroud)
和
expected expression before ')' token
Run Code Online (Sandbox Code Playgroud)
我做错了什么?有没有更好的方法来实现我想要的?
您的代码中有两个错误.
首先,您##错误地使用了令牌粘贴操作符.此运算符用于粘贴两个标记以生成新标记,例如foo ## baryield foobar.您在代码中不需要它,只需删除它即可.
解决此问题后,您的宏看起来像这样:
#define ITERATE_ALL10(IDX) (IDX = 0; IDX < 10; IDX++)
Run Code Online (Sandbox Code Playgroud)
这就是扩展的样子:
for ((i = 0; i < 10; i++)) {
Run Code Online (Sandbox Code Playgroud)
请注意,有一对冗余的括号,这是抛出编译器的原因.从宏定义中删除括号:
#define ITERATE_ALL10(IDX) IDX = 0; IDX < 10; IDX++
Run Code Online (Sandbox Code Playgroud)
或者从宏调用中删除括号:
for ITERATE_ALL10(i)
Run Code Online (Sandbox Code Playgroud)
我更喜欢前者.