Member 14130865 Ответов: 1

Есть еще одна проблема с циклом C foreach


for (auto entry : directory_object->HashBuckets)
	{
		if (entry == NULL)
			continue;

		if (success == true)
			break;
я перепробовал много циклов foreach, но ни один из них не сработал.
я переписываю свой драйвер ядра с c++ на C

Что я уже пробовал:

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

for_each_item(auto entry, directory_object->HashBuckets) {
    
}


и id не сработал мне нужна работа для каждого цикла для C не удалось найти

Richard MacCutchan

Вы не можете использовать конструкции C++ (foreach, шаблоны, константы C++ и т. д.) в коде C. Особенно в коде ядра, где правила намного строже.

Stefan_Lang

Ричард прав. Не пытайтесь имитировать C++ в C. просто перепишите его как стандарт для цикла. Кроме того, не используйте макросы - по крайней мере, сначала. Сначала убедитесь, что код работает так, как задумано, без макросов. Когда это происходит, и когда есть очень хорошая причина тоже вводить макросы, вы все равно не должны делать этого в коде ядра. Риск испортить что-то действительно плохое, не осознавая этого, просто не стоит того, что вы думаете, что получаете взамен.

Member 14130865

благодаря вам всем Ребята я посмотрел на этот массив и использовал обычный цикл for и он сработал :)

1 Ответов

Рейтинг:
10

CPallini

Это зависит от самой природы человека. HashBuckets переменная. Что же это такое, собственно? Вы не дали никакого представления об этом.
Я советую вам не запутываться C код за макросами. Wtite clean C код вместо того, чтобы пытаться имитировать C++ копия.