C suporta o loop foreach?

C suporta o loop foreach?
O foreach loop é uma declaração de fluxo de controle que é uma espécie de estrutura de loop para facilita a travessia da coleção de dados iterável. Ele faz isso removendo o procedimento de inicialização.

Muitas linguagens de programação suportam foreach loop Como C#, C ++ 11 e Java, mas alguns idiomas não o suportam. Uma pergunta comum feita por muitos usuários é que “C suporta o loop de forach?”. Neste artigo, vamos abordar esta consulta.

C suporta o loop "foreach"?

Não, C não suporta foreach loop. No entanto, existem algumas soluções para usar foreach loop Em C, conforme explicado abaixo.

Solução 1: simulando o foreach em c usando macros

Uma maneira de simular um foreach loop em c está usando macros. O macro Parece um fragmento do código que recebe um nome e pode ser invocado usando esse nome. Quando o macro é chamado, o pré -processador substitui o macro nome com o fragmento de código correspondente.

Para simular um foreach loop usando um macro, você pode definir um macro Isso leva dois argumentos: uma variável de loop e uma coleção de dados iterável. O macro então pode expandir para um padrão para loop que iterado pela coleção usando a variável de loop

Considere o seguinte macro definição:

#Define foreach (item, matriz) \

para (int i = 0; i < sizeof(array) / sizeof(array[0]); i++) \
para (item = & Array [i]; & Array [i] != & Array [sizeof (matriz) / sizeof (matriz [0])]; i ++, item = & Array [i])

A macro acima leva dois argumentos: item, que representa a variável de loop, e a matriz, que representa a coleta de dados iterável. O macro Em seguida, expande -se para um loop aninhado que itera sobre a matriz usando a variável de loop.

Para usar o macro, Você pode simplesmente invocá -lo com a variável loop e a matriz como argumentos, como segue:

int array [] = 1, 2, 3, 4, 5;
It * item;
foreach (item, matriz)
printf ("%d \ n", * item);

O código acima iterará sobre a matriz e imprimirá cada elemento usando a variável de loop de itens. O macro expandirá para um padrão de loop que iterado pela matriz usando a variável loop.

Solução 2: simulando o foreach em c usando macro com a lista vinculada

Em uma lista vinculada, cada elemento, também conhecido como nó, tem um valor e um ponteiro para o próximo nó na lista. Para iterar sobre os elementos da lista vinculada, você pode criar um loop que atravessa a lista seguindo esses ponteiros. A foreach loop pode ser simulado em C para listas vinculadas, criando um loop que itera sobre cada nó na lista. Aqui está um exemplo de um loop for-ECH para uma lista vinculada em C:

#Define foreach (nó, lista) \

for (nó* n = cabeça; n != Nulo; n = n-> próximo)

No código acima, Head é um ponteiro para o primeiro nó na lista. O loop começa definindo o ponteiro n para liderar e depois itera enquanto n não for nulo, o que significa que ainda existem nós na lista a serem processados. Em cada iteração do loop, o código dentro do loop é executado para o nó atual apontado por n e n é atualizado para apontar para o próximo nó na lista acessando o próximo ponteiro do nó atual.

Esse loop permite que você processe facilmente cada elemento na lista vinculada sem precisar atravessar manualmente a lista usando operações de ponteiro.

Solução 3: simulando o foreach em c usando macros com matrizes

As macros também podem ser usadas com matrizes para simular foreach loop em c. A macro a seguir pode ser usada para simular o loop forach em C com matrizes:

#Define foreach (item, matriz) \

para (int não = 1, \
contagem = 0, \
tamanho = sizeof (matriz) / sizeof * (matriz); \ ket && count != size; \ \ Keep = !mantenha, contagem ++) \
for (item = (matriz) + contagem; mantenha; mantenha = !manter)

A macro acima leva dois argumentos: item e matriz. o item indica o presente elemento no loop e a matriz representa a matriz sendo arrastada. O macro usa aninhados para loops para iterar sobre cada elemento na matriz.

O primeiro para loop configura variáveis ​​que são usadas para controlar o loop. O segundo para o loop iterado sobre cada elemento da matriz, incrementando a variável de contagem e definindo o item para apontar para o elemento atual.

Usando esta macro, você pode simular facilmente um loop foreach sobre uma matriz em C, que pode melhorar a legibilidade do código e reduzir a quantidade de código de caldeira necessário para iterar sobre uma matriz.

Solução 4: simulando para cada um em C usando aritmética de ponteiro

Uma das maneiras de criar um loop para cada um em C é utilizando o conceito de aritmética de ponteiro.

No caso de iteração de uma matriz, C fornece uma propriedade útil de matrizes que eles sempre terminam com um elemento nulo ou um valor de sentinela. Esse valor Sentinel pode ser usado para marcar o final da matriz, para que saibamos quando parar de iterar. Ao usar a aritmética do ponteiro, podemos aproveitar essa propriedade para iterar sobre os elementos de uma matriz de uma maneira simples e idiomática.

A expressão (& arr) [1] em c dá um ponteiro ao elemento após o final da matriz ARR. Isso significa que o ponteiro (& arr) [1] aponta para o local da memória imediatamente após o último elemento da matriz. Ao usar este ponteiro em um loop for, podemos iterar sobre todos os elementos da matriz da seguinte forma:

int array [] = 1, 2, 3, 4, 5;
para (int * p = array; p < ( & array)[1]; p++)
printf ("%d \ n", * p);

No exemplo acima, a variável p é um ponteiro para o primeiro elemento do Array Arr. A condição do loop p < (&arr)[1] checks if p has reached the end of the array. Finally, the expression *p gives the value of the current element pointed to by p, which is printed to the console using printf(). This code will print all the elements of the array arr.

Ao usar essa abordagem idiomática, podemos criar um simples e eficiente para cada como loop em c para iterar sobre matrizes.

Solução 5: simulando para cada um em C Looping com dados

Na programação C, para percorrer uma string, você pode usar um loop para um loop com uma condição de terminação. Como C não possui um tipo de dados de string embutido, as strings geralmente são representadas como matrizes de caracteres, terminados com um caractere nulo ('\ 0').

Para percorrer uma string em C, você pode inicializar uma variável de ponteiro para apontar para o primeiro caractere na string e depois usar um loop for para iterar sobre os caracteres na string até que o caractere nulo terminante seja alcançado.

Aqui está um exemplo de loop através de uma string em C:

char str [] = "Olá, mundo!";
char * p = str;
para p != '\ 0'; p ++)
printf ("%c", * p);

No exemplo acima, o ponteiro P é inicializado para apontar para o primeiro caractere na string str. O loop for então itera sobre cada caractere na corda, incrementando o ponteiro P até que o caractere nulo seja alcançado. Dentro do loop, o caractere atual é impresso usando o especificador de formato %C na função printf.

Observe que um caractere nulo terminante não está envolvido na saída do loop, pois sinaliza o final da string. Além disso, o loop com dados é uma solução para iterar os dados em C, mas não é um substituto direto para a construção do loop for-EOPE encontrada em outras linguagens de programação

Conclusão

O foreach loop é um tipo de loop for que permite a travessia de coleções de dados iteráveis. Enquanto muitas linguagens de programação permitem o foreach loop, C não suporta. No entanto, como explicado acima, existem várias maneiras de simular foreach loop em c usando macros e outras técnicas. Com essas soluções, os programadores C podem atingir a mesma funcionalidade que foreach loop Em outras linguagens de programação.