首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C有"foreach“循环结构吗?

C有"foreach“循环结构吗?
EN

Stack Overflow用户
提问于 2008-12-31 01:39:14
回答 9查看 171.5K关注 0票数 121

几乎所有的语言都有foreach loop或类似的东西。C有吗?你能发布一些示例代码吗?

EN

回答 9

Stack Overflow用户

发布于 2008-12-30 17:51:11

C没有foreach,但是宏经常被用来模拟它:

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

并且可以像这样使用

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

数组上的迭代也是可能的:

#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)

并且可以像这样使用

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

编辑:如果您对C++解决方案也感兴趣,C++有一个原生的for-each语法,称为"range based for“。

票数 213
EN

Stack Overflow用户

发布于 2008-12-30 18:13:52

以下是C99中for-each宏的完整程序示例:

#include <stdio.h>

typedef struct list_node list_node;
struct list_node {
    list_node *next;
    void *data;
};

#define FOR_EACH(item, list) \
    for (list_node *(item) = (list); (item); (item) = (item)->next)

int
main(int argc, char *argv[])
{
    list_node list[] = {
        { .next = &list[1], .data = "test 1" },
        { .next = &list[2], .data = "test 2" },
        { .next = NULL,     .data = "test 3" }
    };

    FOR_EACH(item, list)
        puts((char *) item->data);

    return 0;
}
票数 11
EN

Stack Overflow用户

发布于 2008-12-30 17:43:36

在C中没有foreach。

您可以使用for循环遍历数据,但需要知道长度或数据需要由已知值终止(例如,空)。

char* nullTerm;
nullTerm = "Loop through my characters";

for(;nullTerm != NULL;nullTerm++)
{
    //nullTerm will now point to the next character.
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/400951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档