Does C have a “foreach” loop construct?

前端 未结 12 2243
情书的邮戳
情书的邮戳 2020-12-02 03:49

Almost all languages have a foreach loop or something similar. Does C have one? Can you post some example code?

12条回答
  •  心在旅途
    2020-12-02 04:37

    C doesn't have a foreach, but macros are frequently used to emulate that:

    #define for_each_item(item, list) \
        for(T * item = list->head; item != NULL; item = item->next)
    

    And can be used like

    for_each_item(i, processes) {
        i->wakeup();
    }
    

    Iteration over an array is also possible:

    #define foreach(item, array) \
        for(int keep = 1, \
                count = 0,\
                size = sizeof (array) / sizeof *(array); \
            keep && count != size; \
            keep = !keep, count++) \
          for(item = (array) + count; keep; keep = !keep)
    

    And can be used like

    int values[] = { 1, 2, 3 };
    foreach(int *v, values) {
        printf("value: %d\n", *v);
    }
    

    Edit: In case you are also interested in C++ solutions, C++ has a native for-each syntax called "range based for"

提交回复
热议问题