Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ordre des declaration et initialisation

7 réponses
Avatar
Tibo++ (was Zorrino)
Bonjour a tous,

Voici ma question :

Soit l'ecriture suivante

int foo(int bar) {
int v1=f1(bar);
int v2=f2(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=f1(bar);
v2=f2(v1);

Merci par avance de vos reponses.

--
Tibo++

7 réponses

Avatar
Pierre Maurette
"Tibo++ (was Zorrino)" typa:

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

Avatar
Antoine Leca
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

Avatar
Laurent Deniau
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.

Avatar
Horst Kraemer
On Wed, 05 May 2004 16:41:30 +0200, "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 ?


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

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Tibo++ (was Zorrino)" wrote:

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/

Avatar
K. Ahausse
"Tibo++ (was Zorrino)" a écrit dans le message de
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.

Avatar
Tibo++
"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++