C'est juste une question de sémantique, mais le while me semble plus adapté à ce qu'on cherche à faire ici. Après niveau performance, c'est le compilo qui gère, comme le dit Pouet_forever, de grande chances que ça revienne au même.
Aucune. La variable i n'a aucune raison de prolonger sa misérable existence au delà de la boucle, donc ça devrait être :
for (int i = 0 ; tab[i] != -1 ; i++) {
printf("%d\n", tab[i]);
}
La version avec for est plus adaptée parce qu'elle permet d'exprimer le caractère local de la variable, et de proposer une tournure idiomatique pour un parcours linéaire de tableau avec valeur sentinelle.
Mais ce n'est pas une question de performances du code généré.
---
Le code généré (compiler avec gcc -Os -S fichier.c pour voir) est EXACTEMENT LE MEME pour les deux versions, ainsi que pour une autre avec pointeur
Pour la micro-optimisation, le compilateur est généralement plus fort que le programmeur moyen. Détecter et optimiser les parcours linéaires d'un tableau, les compilos savent faire ça les doigts dans le nez depuis un demi siècle.
Déjà, si le débutant tracassé par l'optimisation pensait à cocher les bonnes options dans son IDE...
---
A la limite, si on a beaucoup de traitements sur des tableaux avec des valeurs sentinelles -1, on écrirait
Comme disent les autres, le compilo gère ça à ta place. Toi en tant que programmeur C, tu dois juste te soucier de faire du code propre et maintenable.
Ceci dit il y a quelques pratiques à avoir pour avoir un code plus performant - par exemple quand tu fais une multiplication de matrice, suivant si tu fais tes calculs par ligne ou par colonne tu n'auras pas la même performance. Mais c'est un sujet assez avancé - en tant que débutant c'est le moindre de tes soucis, et dans 90% des cas on s'en fiche.
Sinon effectivement activer les flags d'optimisation ne peuvent pas faire de mal : -O2 ou -O3. Faut voir avec ton IDE comment activer ça.
Pour ma part, je préfère le for car tous les contrôles de la boucle sont réunis au même endroit et du coup je trouve le code plus lisible.
boucle for ou while
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Bonhomme !! | Jeu de plateforme : Prototype.