几乎所有的语言都有foreach
loop或类似的东西。C有吗?你能发布一些示例代码吗?
发布于 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“。
发布于 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;
}
发布于 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.
}
https://stackoverflow.com/questions/400951
复制相似问题