2009-12-22 4 views
0

De plus, existe-t-il une différence entre l'initialisation des variables un et deux, et l'initialisation des variables trois et quatre? L'arrière-plan de la question est, que j'obtiens une erreur de compilation dans Visual Studio 6.0 avec l'initialisation de la variable deux et quatre. Avec Visual Studio 2008, il se compile bien.Tous les membres des structures et des tableaux suivants sont-ils initialisés avec zéro?

struct stTest 
{ 
    int a; 
    char b[10]; 
}; 

stTest one = {0}; 
stTest two = {}; 
stTest three[10] = {0}; 
stTest four[10] = {}; 
+0

Cette syntaxe devrait être valide. Quelle est la nature de l'erreur du compilateur et pouvez-vous fournir un exemple qui enveloppe cet extrait dans un court 'main()' qui provoque toujours l'erreur? – Adam

+0

Visual Studio 6.0 avait de sérieux problèmes de conformité aux normes. Microsoft a fait beaucoup de travail et VS 2008 est très proche de la norme, bien qu'il reste quelques problèmes mineurs. –

+0

Visual Studio 6 n'avait pas de véritable standard à respecter. Il a été publié avant la sortie du premier standard C++. – AnT

Répondre

2

Oui, tous doivent être initialisés avec 0 par le langage standard (C++ 98).

Visual Studio 6 est connu pour ne pas effectuer la gestion correcte de {} cas: il ne prend même pas en charge la syntaxe {}, si je me souviens bien.

Cependant, Visual Studio 6 est un compilateur pré-standard. Il a été publié avant la sortie de la norme C++ 98.

0

Les initialisations sont les mêmes. Visual Studio 2.0 est cassé.


Édition:

Oui, ils sont initialisés à zéro.

0

(Ripped from MSDN)

Si j'ai une structure appelée TPoint ...

struct tPoint { 
     int x; 
     int y; 
    }; 

... et je l'utilise comme suit ...

tPoint spot {10,20}; 

... Je peux m'attendre à ce que les membres x et y soient initialisés. En ce qui concerne votre première question, je suppose que le tableau b n'est pas initialisé parce que vous ne donnez qu'une seule valeur pour l'initialisation.

Vous pouvez initialiser les valeurs à zéro par défaut:

struct stTest 
{ 
    int a = 0; 
    char b[10] = {0}; 
}; 

Vous pouvez initialiser le tableau comme ceci:

char i[10] = {0}; 
stTest one = {0, i}; 

Quant à savoir pourquoi il compile avec VS 2008 et non VS 6.0, VS 2008 ignore probablement l'ensemble vide et n'essaie pas d'initialiser quoi que ce soit.

Questions connexes