[gull] Subtilité de C n° 4 : déclaration de struct

Marc Mongenet marc at mongenet.ch
Tue Apr 15 02:37:21 CEST 2008


Je n'ai été au point avec cette subtilité qu'en relisant
le K&R suite aux discussions de la subtilité de C n° 2.
Autrement dit, j'ai souvent déclaré des structures
sans vraiment comprendre ce que je faisais :
je me contentais de constater que ça marchait,
ce qui est pourtant fort risqué en C...
Mais pour une fois, le risque apparaît très faible :
je n'ai jamais rencontré de problème (de portabilité
ou autre) malgré ma négligence.
Ce n'est cependant pas une raison pour bidouiller
plus longtemps !

Voici donc le Quiz :
Parmi les deux exemples suivants, un seul compile
(avec gcc -c -ansi -pedantic). Lequel ? Pourquoi ?

----------------------- ex1.c
struct s { int i; } v;
struct s;

void f(void) {
	struct ps { struct s *p; } ps;
	struct s { int j; } v;
	ps.p = &v;
	ps.p->j = 0;
}

----------------------- ex2.c
struct s { int i; } v;

void f(void) {
	struct s;
	struct ps { struct s *p; } ps;
	struct s { int j; } v;
	ps.p = &v;
	ps.p->j = 0;
}
-----------------------

NB : La seule différence est la position du « struct s; ».

-- 
Marc Mongenet
Creator of the Web 2 Markup Language
http://w2ml.com



More information about the gull mailing list