Ordre des declaration et initialisation

Le
Tibo++ (was Zorrino)
Bonjour a tous,

Voici ma question :

Soit l'ecriture suivante

int foo(int bar) {
int v1(bar);
int v2(v1);

/* corps de la fct */

}

Suis je assure que v1 sera initialise a f1(bar)
avant que l'appel f2(v1) soit fait ?

Ou est il plus sage d'ecrire :
int foo(int bar) {
int v1;
int v2;

v1(bar);
v2(v1);

Merci par avance de vos reponses.

--
Tibo++
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Maurette
Le #623796
"Tibo++ (was Zorrino)"
Bonjour a tous,

Voici ma question :

Soit l'ecriture suivante

int foo(int bar) {
int v1ñ(bar);
int v2ò(v1);

/* corps de la fct */

}

Suis je assure que v1 sera initialise a f1(bar)
avant que l'appel f2(v1) soit fait ?

Ou est il plus sage d'ecrire :
int foo(int bar) {
int v1;
int v2;

v1ñ(bar);
v2ò(v1);

Merci par avance de vos reponses.
En cas de doute (là, j n'en aurais pas eu, mais c'est peut-être une

erreur), je mets ce qu'il fait de ligne et de parenthèses. Pour gagner
deux lignes :
int foo(int bar) {
int v1;
int v2ò(v1ñ(bar));

/* corps de la fct */

}
Mais j'attends les autres réponses sur l'ordre des initialisations.
--
Pierre

Antoine Leca
Le #623795
En , Tibo++ (was Zorrino) va escriure:
int v1ñ(bar);
int v2ò(v1);
Suis je assure que v1 sera initialise a f1(bar)
avant que l'appel f2(v1) soit fait ?


Non.

En fait, la norme te le garantit. C99 l'explicite mot-à-mot: 6.7.5p3, "la
fin d'un déclarateur entier est un point de séquence". Mais ce n'est pas
aussi clair avec C90, même si l'équivalent y est, même si l'annexe de 20
lignes sur les points de séquence ne laisse aucune équivoque. Résultat, il y
a un risque qu'un compilateur machin ne le fasse pas, et là tu seras dans de
beaux draps...

Maintenant, la réponse officielle est « oui ».


Ou est il plus sage d'ecrire :


Oui, en tous cas dans l'exemple que tu donnes (« sage » est exactement le
bon mot ici). Bien sûr, si tu as outrageusement simplifié, peut-être que la
réponse n'est pas aussi limpide. Tu as les infos pour interpréter.


Antoine

Laurent Deniau
Le #623794
Tibo++ (was Zorrino) wrote:
Bonjour a tous,

Voici ma question :

Soit l'ecriture suivante

int foo(int bar) {
int v1ñ(bar);
int v2ò(v1);

/* corps de la fct */

}

Suis je assure que v1 sera initialise a f1(bar)
avant que l'appel f2(v1) soit fait ?


Oui, sans aucun doute. Si c'est pas le cas, le compilo n'est pas
conforme (et je dirais meme de tres mauvaise qualite!).

a+, ld.

Horst Kraemer
Le #623793
On Wed, 05 May 2004 16:41:30 +0200, "Tibo++ (was Zorrino)"

Bonjour a tous,

Voici ma question :

Soit l'ecriture suivante

int foo(int bar) {
int v1ñ(bar);
int v2ò(v1);

/* corps de la fct */

}

Suis je assure que v1 sera initialise a f1(bar)
avant que l'appel f2(v1) soit fait ?


La norme dit que les objets automatiques définis dans un bloc {}
seront initialisés dans l'ordre dans lequel ils apparaissent dans la
source. Donc tu es assuré si ton compilateur respecte la norme ;-)

--
Horst

Emmanuel Delahaye
Le #623520
In 'fr.comp.lang.c', "Tibo++ (was Zorrino)"
int foo(int bar) {
int v1ñ(bar);
int v2ò(v1);

/* corps de la fct */

}

Suis je assure que v1 sera initialise a f1(bar)
avant que l'appel f2(v1) soit fait ?


Oui.

Ou est il plus sage d'ecrire :
int foo(int bar) {
int v1;
int v2;

v1ñ(bar);
v2ò(v1);


Comme tu veux. Je préfère la première forme.

--
-ed- get my email here: http://marreduspam.com/ad672570
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-reference: http://www.dinkumware.com/manuals/reader.aspx?libÉ9
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

K. Ahausse
Le #623230
"Tibo++ (was Zorrino)" news:
Bonjour a tous,

Voici ma question :

Soit l'ecriture suivante

int foo(int bar) {
int v1ñ(bar);
int v2ò(v1);

/* corps de la fct */

}

Suis je assure que v1 sera initialise a f1(bar)
avant que l'appel f2(v1) soit fait ?

Ou est il plus sage d'ecrire :
int foo(int bar) {
int v1;
int v2;

v1ñ(bar);
v2ò(v1);

Merci par avance de vos reponses.

--
Tibo++


Marrant, avec une seule norme on n'a les deux réponses possibles.

Le truc, c'est qu'en cherchant bien il n'existe pas un seul compilateur
respectant à la lettre cette norme, sans meme parler des interpretations
antagonistes de cette norme.

Tibo++
Le #623229
"Tibo++ (was Zorrino)" wrote:


Suis je assure que v1 sera initialise a f1(bar)
avant que l'appel f2(v1) soit fait ?



Si j'ai bien compris c99 est tres clair a ce sujet,
mais c90 pourrais laisser planer un doute.

Le code que j'ecrit doit etre livre a plusieurs
clients sous forme de fichiers sources qu'ils
compileront chacun avec leur compilateur.

Donc dans ce cadre je vais utiliser la seconde
forme meme si elle est moins elegante, ca
m'evitera peut etre des ennuis.

Merci d'avoir pris le temps de repondre.

--
Tibo++

Publicité
Poster une réponse
Anonyme