我的代码中有几个循环,所有循环都检查条件是否为真。
for(int i = 0; i < size; i++) {
if (check_conditition(array[i]))
break;
// do something
}
所以我想把它包装在一个宏上,所以我不必在所有这些上加check_conditition()
,例如:
for_each_item(i, array) {
// do something
}
我该怎么做?还是有更好的选择?
答案 0 :(得分:1)
要在宏中添加check_condition
,您可以将其添加到for
循环条件中:
#define for_each_item(idx, array) for (int idx=0; \
(idx<size) && !check_condition(array[idx]); \
idx++)
现在您可以按照要求使用宏:
for_each_item(i, array)
{
// do something
}
P.S。您可以将size
替换为sizeof(array)/sizeof(array[0])
:
#define for_each_item(idx, array) for (int idx=0; \
(idx<(sizeof(array)/sizeof(array[0]))) && \
!check_condition(array[idx]); \
idx++)
答案 1 :(得分:0)
你可以这样做:
#include <stdio.h>
#define foreach(x, size, array) for( x = 0; x < size; x++) {\
if (check_conditition(array[x]))\
break;
#define endforeach }
int check_conditition(int a){ return 0;}
int main(int argc, char *argv[])
{
int i = 0;
int size = 10;
int array[10] = {1,2,3,4,5,6,7,8,9,10};
foreach(i, size, array)
printf("%d", array[i]);
endforeach
return 0;
}