C soutient-il la boucle «foreach»?

C soutient-il la boucle «foreach»?
Le boucle foreach est une déclaration de flux de contrôle qui est une sorte de structure pour boucle qui facilite la traversée de la collecte de données itérable. Il accomplit cela en supprimant la procédure d'initialisation.

De nombreux langages de programmation prennent en charge boucle foreach Comme C #, C ++ 11 et Java, mais certaines langues ne le soutiennent pas. Une question courante posée par de nombreux utilisateurs est que «Le C est-il soutenu For Forach Loop?". Dans cet article, nous allons aborder cette requête.

C soutient-il la boucle «foreach»?

Non, C ne prend pas en charge boucle foreach. Cependant, il existe des solutions à l'utilisation boucle foreach en C comme expliqué ci-dessous.

Solution 1: simulant foreach in C à l'aide de macros

Une façon de simuler un boucle foreach en C utilise macros. Le macro Semble être un fragment du code qui reçoit un nom et peut être invoqué en utilisant ce nom. Quand le macro est invoqué, le préprocesseur remplace le macro Nom avec le fragment de code correspondant.

Pour simuler un boucle foreach utilisant un macro, vous pouvez définir un macro Cela prend deux arguments: une variable de boucle et une collecte de données itérable. Le macro peut ensuite s'étendre à une norme pour la boucle qui itère sur la collection à l'aide de la variable de boucle

Considérer ce qui suit macro définition:

#define foreach (article, array) \

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

La macro ci-dessus prend deux arguments: élément, qui représente la variable de boucle, et Array, qui représente la collecte de données itérable. Le macro se développe ensuite à une boucle imbriquée qui itère sur le tableau à l'aide de la variable de boucle.

Pour utiliser le macro, Vous pouvez simplement l'invoquer avec la variable de boucle et le tableau comme arguments, comme suit:

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

Le code ci-dessus itérera sur le tableau et imprimera chaque élément à l'aide de la variable de boucle d'élément. Le macro s'étendra à une norme pour la boucle qui itère sur le tableau à l'aide de la variable de boucle.

Solution 2: simulant foreach in C à l'aide de macro avec liste liée

Dans une liste liée, chaque élément, également connu sous le nom de nœud, a une valeur et un pointeur vers le nœud suivant de la liste. Pour itérer les éléments de la liste liée, vous pouvez créer une boucle qui traverse la liste en suivant ces pointeurs. UN boucle foreach peut être simulé en C pour les listes liées en créant une boucle qui itère sur chaque nœud de la liste. Voici un exemple de boucle pour une liste liée en C:

#define foreach (nœud, liste) \

pour (nœud * n = tête; n != Null; n = n-> Suivant)

Dans le code ci-dessus, la tête est un pointeur vers le premier nœud de la liste. La boucle commence par définir le pointeur N pour se diriger, puis itère tant que n n'est pas nul, ce qui signifie qu'il y a encore des nœuds dans la liste à traiter. À chaque itération de la boucle, le code à l'intérieur de la boucle est exécuté pour le nœud actuel indiqué par n, puis n est mis à jour pour pointer vers le nœud suivant de la liste en accédant au pointeur suivant du nœud actuel.

Cette boucle vous permet de traiter facilement chaque élément de la liste liée sans avoir à traverser manuellement la liste à l'aide des opérations du pointeur.

Solution 3: simulant foreach in c à l'aide de macros avec des tableaux

Les macros peuvent également être utilisées avec des tableaux pour simuler boucle foreach en c. La macro suivante peut être utilisée pour simuler la boucle ForEach en C avec les tableaux:

#define foreach (article, array) \

pour (int keep = 1, \
count = 0, \
size = sizeof (array) / sizeof * (array); \ keep && compter != taille; \ keep = !garder, compter ++) \
pour (item = (array) + compter; keep; keep = !donjon)

La macro ci-dessus prend deux arguments: article et tableau. L'élément indique l'élément actuel dans la boucle, et le tableau représente le tableau en cours de boucle. Le macro utilise des boucles imbriquées pour itérer sur chaque élément du tableau.

Le premier pour Loop configure les variables utilisées pour contrôler la boucle. La seconde pour Loop itère sur chaque élément du tableau en incrémentant la variable de comptage et en définissant l'élément pour pointer vers l'élément actuel.

À l'aide de cette macro, vous pouvez facilement simuler une boucle FOREAK sur un tableau en C, ce qui peut améliorer la lisibilité du code et réduire la quantité de code de passe-partout requis pour itérater sur un tableau.

Solution 4: simulant foreach in c à l'aide de l'arithmétique du pointeur

L'une des façons de créer une boucle de type Forach en C est en utilisant le concept d'arithmétique du pointeur.

Dans le cas de l'itération d'un tableau, C fournit une propriété utile des tableaux qu'ils se terminent toujours par un élément nul ou une valeur sentinelle. Cette valeur sentinelle peut être utilisée pour marquer l'extrémité du tableau afin que nous sachions quand arrêter d'itréger. En utilisant l'arithmétique du pointeur, nous pouvons profiter de cette propriété pour itérer les éléments d'un tableau de manière simple et idiomatique.

L'expression (& arr) [1] en C donne un pointeur vers l'élément après la fin du tableau Arr. Cela signifie que le pointeur (& arr) [1] pointe vers l'emplacement de la mémoire immédiatement après le dernier élément du tableau. En utilisant ce pointeur dans une boucle pour une boucle, nous pouvons parcourir tous les éléments du tableau comme suit:

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

Dans l'exemple ci-dessus, la variable P est un pointeur vers le premier élément du tableau Arr. La condition de boucle 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.

En utilisant cette approche idiomatique, nous pouvons créer un simple et efficace pour chaque comme une boucle en C pour itérer sur les tableaux.

Solution 5: Simulation de Forach en C en boucle C avec des données

Dans la programmation C, pour faire un boucle à travers une chaîne, vous pouvez utiliser un pour une boucle avec une condition de terminaison. Étant donné que C n'a pas de type de données de chaîne intégré, les chaînes sont généralement représentées comme des tableaux de caractères, terminés avec un caractère nul ('\ 0').

Pour traverser une chaîne en C, vous pouvez initialiser une variable de pointeur pour pointer vers le premier caractère de la chaîne, puis utiliser une boucle pour itérater sur les caractères de la chaîne jusqu'à ce que le caractère nul terminant soit atteint.

Voici un exemple de boucle à travers une chaîne en C:

Char Str [] = "Hello, World!"
char * p = str;
pour P != '\ 0'; p ++)
printf ("% c", * p);

Dans l'exemple ci-dessus, le pointeur P est initialisé pour pointer le premier caractère de la chaîne Str. La boucle FOR alors itère sur chaque caractère de la chaîne en incrémentant le pointeur P jusqu'à ce que le caractère nul soit atteint. Dans la boucle, le caractère actuel est imprimé à l'aide du spécificateur de format% C dans la fonction printf.

Notez qu'un caractère nul de terminaison n'est pas impliqué dans la sortie de la boucle, car il signale la fin de la chaîne. De plus, le bouclage avec les données est une solution pour itération sur les données en C, mais ce n'est pas un remplacement direct de la construction de boucle for-out trouvée dans d'autres langages de programmation

Conclusion

Le boucle foreach est un type de boucle pour permettre la traversée des collections de données itératives. Tandis que de nombreux langages de programmation permettent le boucle foreach, C ne le soutient pas. Cependant, comme expliqué ci-dessus, il existe plusieurs façons de simuler boucle foreach en C en utilisant macros et d'autres techniques. Avec ces solutions, les programmeurs C peuvent obtenir les mêmes fonctionnalités que boucle foreach dans d'autres langages de programmation.