在C

时间:2016-02-13 15:53:31

标签: c for-loop macros function-pointers

我的代码中有几个循环,所有循环都检查条件是否为真。

for(int i = 0; i < size; i++) {
    if (check_conditition(array[i]))
        break;
    // do something
}

所以我想把它包装在一个宏上,所以我不必在所有这些上加check_conditition(),例如:

for_each_item(i, array) {
    // do something
}

我该怎么做?还是有更好的选择?

2 个答案:

答案 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;
}