Comment initialiser plusieurs variables dans un for (;;) boucle en C?
Je pense qu'on peut initialiser plusieurs variables dans un for
boucle:
for (int i = 0, char* ptr = bam; i < 10; i++) { ... }
Mais je viens de constater que ce n'est pas possible. GCC donne l'erreur suivante:
erreur: attendu unqualified-id before 'char'
Est-il vrai que vous ne pouvez pas initialiser des variables de types différents dans un for
boucle?
- Je sais qu'il est très étroitement liés à la question quelque part, DONC, mais je n'arrive à le trouver...
- pourquoi voudriez-vous faire à la prochaine personne qui a la lecture de votre code (qui peut être vous)?
- Je ne pense vraiment pas que
for(int i = 0, char* ptr = bam)
est plus difficile à lire queint i; char* ptr; for(i = 0, ptr = bam)
- d'accord, avec des noms comme
ptr
etbam
, c'est assez dur pour le rendre moins lisible - probablement simplifié de la question, en demandant à des fins de
- stackoverflow.com/questions/3337126/...
- Je ne sais pas pourquoi vous avez réalisé que chez moi; avez-vous été à la recherche for @Andreas? En tout cas, qui semble être un doublon; vous devez voter pour fermer celui-ci comme un double de l'un ou l'une il est marqué comme étant un possible double de ( Plusieurs Problème de Compteur Dans la Boucle For )
- Vous avez raison! C'était censé être @Andreas.
- double possible de Est-il possible de déclarer deux variables de types différents dans une boucle for?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez (mais généralement ne pas) utiliser un local de type struct.
Depuis C++11, vous pouvez initialiser les composants les plus élégamment, tant qu'ils ne dépendent pas de la variable locale:
C'est juste presque lisible assez pour vraiment l'utiliser.
C++17 est prévu d'aborder le problème avec structuré liaisons:
Cependant, l'ensemble des fonctionnalités et la syntaxe sont encore en pleine évolution.
C'est vrai que vous ne pouvez pas simultanément déclarer et initialiser declarators de différents types. Mais ce n'est pas spécifique pour les boucles. Vous recevrez un message d'erreur si vous n':
trop. La première clause de l'une boucle for peut être (C99 §6.8.5.3) d'une "déclaration" ou un "vide d'expression". Notez que vous pouvez faire:
parce que
i
et*j
sont tous deux de typeint
. La syntaxe exacte pour une déclaration est donnée au §6.7Si vous avez vraiment besoin des variables pour rester dans le champ d'application de la boucle, vous pouvez écrire des
C'est un peu moche, mais qui fonctionne.
for (...)
(de sorte que l'utilisateur de la macro ajoute leur propre accolades pour le corps).Essayez ceci:
Vous pouvez également le faire:
Selon http://linuxsoftware.co.nz/cppgrammar.html#for-init-statement vous pouvez obtenir sur simple déclaration ou une expression (ce qui n'est pas permis de contenir la déclaration) dans l'instruction init. Cela signifie que la réponse est non (si j'ai analysé la BNF correctement 🙂 )
Je pense que les langues qu'ils vous enseignent les enfants de nos jours sont destinés à le menotter et vous pourrir votre cerveau de sorte que vous venez d'être tranquille et de mettre les blocs de lego à très limitée de la forme dans laquelle elles sont conçues pour s'emboîtent afin que vous puissiez construire médiocre des trucs. La beauté C est que vous pouvez suivre les règles, et de façon intelligente, pour obtenir ce que vous voulez. Voici comment vous écrire cette boucle supplémentaire initialzers. Voici un exemple qui vous montre comment combler une longue boucle sur un premier. Vous utilisez le premier pirate de ses variables et de rester à portée. Vous utilisez une variable fictive pour faire la boucle externe exécuter une seule fois. Une smart compilateur va note le fait et nuke la boucle avec la boucle unroller. Donc pour vous, c'est tout bénéfice. Le deuxième tableau, puis utilise des variables à partir de la première déclaration et la deuxième déclaration et s'exécute à la fin. C'est un exemple trivial seulement vous être en mesure de comprendre comment le faire sans la main lourde déplacer de jeter certains de portée. Parce que cette technique peut être utilisée avec les macros lors de l'écrit comme cela dans le but de créer de belles prochaine génération comme la structure de l'énumération, comme "la valeur dans la matrice de faire", de qui j'ai beaucoup d'.
Rien ne manque ici. Cette technique de la boucle pour rejoindre un one shot pour la boucle a été utilisé pour incorporer dans un appel pour obtenir un énumérateur pour cet objet de hachage, et de commencer l'énumération, pour obtenir les valeurs extraites de la clé et la valeur, et aussi par commodité de les créer nulle pointeurs pour l'utilisateur, il suffit de les nommer. Puis ils sont remplis, et l'énumération continuera jusqu'à ce que toutes les clés et les valeurs sont fait. Si l'utilisateur a des pauses dans l'itération de l'ensemble de la cascade de oneshot forloops se délitera que nous voulons, car elles sont probablement même pas là puisqu'ils ont été construits avec de simples const ops, le compilateur peut voir, va se dérouler la boucle. Donc, fondamentalement, il vous permet d'étendre la syntaxe de faire des choses comme cela sans pénalité.
Mais vous avez besoin de savoir un peu de C et, au moins, ont votre en-tête du robot boîte que les écoles sont de les mettre dans ces jours avec ces jouets langues.