[gull] Subtilité de C n° 5 : Tableaux et pointeurs, les fossiles

Daniel Cordey dc at mjt.ch
Thu May 1 14:19:27 CEST 2008


On Wednesday 30 April 2008, Marc Mongenet wrote:
> Les tableaux et les pointeurs, c'est la mère de toutes les subtilités
> de C. :-)

Et sa baute, puissance... :-B


> C'est un fossile troublant, car il nous laisse donner une taille,
> et l'ignore silencieusement :
> void f(int p[3]) {
>    *p++ = 1;
> }

Oui, il est vrait que les [] sont purement informative... leur presence devrait nous indiquer que le tableau a une taille fixe, mais comme aucun autre mechanisme du langage ne se preoccupe de cette notation, elle ne sert pas a grand chose... Ceci mis a part, comme il est possible d'ecrire :

	*p++++ = 1;

J'ai aussi pris l'habitude d'utiliser systematiquement les parenthese afin d'enlever toute ambiguite, de facilite la tache du compilateur (un micro-poil plus rapide) et limiter les erreurs. Ainsi, je recommande d'ecrire :

	*(p++)++ = 1;


Vous avez aussi le droit de rajouter des espace lorsque vous ecrivez des trucs comme :

	*p+++++++x = 1;

Bien sur, personne n'ecrit du code comme ca, mais c'est juste pour demontrer que l'usage de parentheses et d'espaces permet de lever toute ambiguite pour le lecteur, ainsi que de demontrer que sous un dehors rebarbatif et incomprehensible, les pointeurs en C ne sont pas l'horreur que certains pretendent. On peut programmer de maniere tres propre en C avec des  pointeurs !

	*(p++)++ + ++x = 1;

voir :
	(*(p++)++) + (++x) = 1;

:-)

dc


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://forum.linux-gull.ch/pipermail/gull/attachments/20080501/68a6dfb2/attachment.htm>


More information about the gull mailing list