9
votes

Portée variable en C ++

Si j'avais le code suivant:

myvar = 0;
var2 = 0;


2 commentaires

"Mon VC ++ 6 compile correctement," Non, ça ne le fait pas.


@all répond, j'ai VC ++ 6 uniquement sur un ordinateur; Sur mon autre, j'ai VC ++ 2008eee. Je suis obligé d'utiliser VC ++ 6. :)


5 Réponses :


17
votes

Non, ce ne serait pas (§3.3.2 Portée locale):

  1. Un nom déclaré dans un bloc (6.3) est local à ce bloc. Son potentiel la portée commence à son point de Déclaration (3.3.1) et se termine à la fin de sa région déclarative.

    Je vous recommande d'utiliser des compilers publiés au cours de la dernière décennie.


0 commentaires

1
votes

serait-ce légal? Mon VC ++ 6 compile correctement, mais je pense que cela devrait être illégal.

Non, cela ne devrait pas être légal. Dump VC ++ 6. Utilisez un nouveau compilateur.


0 commentaires

1
votes

VC a pris environ une décennie pour mettre en œuvre une portée appropriée des variables déclarées dans des boucles et des états conditionnels. Généralement, vous ne pouvez pas compter sur le jugement VC6 concernant C ++.


0 commentaires

11
votes

VC6 est plutôt vieux, et pas toujours ... rigide ... dans son application de la norme :-) En fait fuite em> portée dans certaines circonstances telles que:

for (int i = 0; i < 10; i++) { }
// You can still use 'i' here.


0 commentaires

4
votes

qui devrait être illégal mais VC6 était très mauvais à cela.

Dans Visual Studio 2005, un nouveau paramètre de niveau de projet a été introduit nommé "Force Conformance dans la portée de la boucle" . Cela a également abordé le problème et a également fourni une compatibilité rédactable. Ce qui signifie que les bases de code plus anciennes pouvaient compiler dans de nouvelles versions de Visual Studio en désactivant ce paramètre.

Cependant, une chose que MSD a eu raison dans la VS2005 de la transformer par défaut de par défaut, devenant un peu plus proche des normes.


0 commentaires