2010-07-06 5 views
10

Puis-je écrire simplementDéclaration et initialisation de variable pour la boucle

for (int i = 0; ... 

au lieu de

int i; 
for (i = 0; ... 

en C ou C++?

(et la variable i accessible dans la boucle uniquement?)

+5

Essayer ceci aurait probablement exigé moins d'effort que de poster cette question à ce sujet –

+3

@Don: mais donnerait la mauvaise réponse si vous deviez utiliser un vieux compilateur pré-standard croustillant (comme certaines personnes semblent encore le faire). Il est préférable de demander, ou de regarder dans la norme, que de faire confiance au comportement de votre compilateur particulier. –

Répondre

20

Son valable en C++

Il était pas légal dans la version originale de C.
Mais a été adoptée dans le cadre de C dans C99 (lorsque certaines fonctionnalités C++ étaient en quelque sorte backportées à C)
L'utilisation gcc

gcc -std=c99 <file>.c 

La variable est valide à l'intérieur de l'instruction for et de l'instruction qui est bouclée. S'il s'agit d'une instruction de bloc, elle est valable pour l'ensemble du bloc.

for(int loop = 0; loop < 10; ++loop) 
{ 
    // loop valid in here aswell 
} 

// loop NOT valid here. 
2

Oui et oui. Mais pour C, apparemment votre compilateur doit être en mode C99.

18

Oui, c'est légal en C++ et en C99.

5

Il est parfaitement légal de le faire en C99 ou C++:

for(int i=0; i<max; ++i) 
{ 
    //some code 
} 

et son while équivalent est:

{ 
    int i=0 
    while(i<max) 
    { 
     //some code 
     ++i; 
    } 
} 
+3

Les boucles 'for' et' while' ne sont pas tout à fait équivalentes. Considérez ce qui se passe si "du code" inclut une instruction "continue". – jamesdlin

+4

Je ne faisais que clarifier la portée de 'i'. Vous pouvez toujours faire attention qu'il y ait un '++ i' avant d'appeler' continuer', mais sinon, vous avez un point valide. – rubenvb

3

Acutally for(int i=0;i<somevalue;i++) a toujours été foré en moi comme le moyen privilégié pour définir une boucle for en c et C++.

Tant que "i" n'est accessible que dans votre boucle, vous devez faire attention aux noms de variables que vous utilisez. Si vous déclarez "i" en tant que variable en dehors de la boucle et que vous l'utilisez pour quelque chose d'autre, vous allez provoquer un problème lors de l'utilisation de cette même variable pour un compteur de boucles.

Par exemple:

int i = 10; 
i = 10 + PI; 

sera changé automatiquement lorsque vous appuyez sur la boucle et i = déclarer 0

2

Puis-je écrire simplement

Oui.

(et la volonté variable i soit accessible dans la boucle uniquement?)

Dépend du compilateur et sa la version. AFAIK, dans les compilateurs modernes, je ne suis accessible qu'à l'intérieur de la boucle. Certains anciens compilateurs permettaient i d'être également accessible en dehors de la boucle. Certains compilateurs permettent d'accéder à i en dehors de la boucle et vous avertissent d'un comportement non standard.

Je pense (mais je ne suis pas sûr à ce sujet), que "i en dehors de la boucle" a été utilisé quelque part dans VC98 (Visual Studio 6, qui AFAIK, avait aussi quelque part une variable "i" définie globalement cela pourrait conduire à un comportement extrêmement intéressant). Je pense que que (microsoft) compilateurs fait quelque part autour de 2000..2003 a commencé à imprimer "extensions non standard utilisées" pour l'utilisation de i en dehors de la boucle, et finalement cette fonctionnalité a complètement disparu. Il n'est pas présent dans le studio visuel 2008.

Ceci est probablement passé selon une norme mais je ne peux pas donner un lien ou une citation pour le moment.

0

si vous utilisez côté à la variable de la boucle, il sera changer à chaque fois lors de l'initialisation à l'intérieur de la boucle

int i = 0; 
for(int e = 0; e < 10; e++) 
{ 
i = e; 
} 

maintenant je valeur change chaque fois

Questions connexes