
Envoyé par
Arzar
Et si !
1 2 3 4 5
|
typdef int* intptr;
intptr a, b, c;
b = new int; // aucun problème, b est bien un int*
*b = 5; |
int* est un type. La preuve c'est qu'on peut en faire un alias avec typedef.
Le fait que la déclaration [int* a, b, c;] ne déclare pas trois pointeurs, contrairement à ce que l'on s'attend intuitivement, n'est qu'un héritage d'une bizarrerie du C.
Sauf que, jutement avec le typedef tu déclares trois pointeurs, alors que, sans le typedef, quelle que soit la position de l'étoile, tu déclares un pointeur et... deux int...
parce que:
1 2 3 4
| int* a, b, c;
int d = 10;
a = &d; // OK: a est bien un pointeur
b = &d; // NOK : impossible de convertir un int en int* ;) |
Et donc, partant du fait, que je répète à longueur d'années, qu'un code est plus souvent lu que compilé, et que la première qualité d'un code - avant même de faire ce qu'on attend de lui -doit être d'être facilement compréhensible et non ambigu pour le lecteur, la meilleure solution reste donc bel et bien
1 2 3
| int * a;
int b;
int c; |
Parce qu'il n'y a ici aucune différence au point de vue des performances, mais que, par contre, nous évitons
que le lecteur ne croie avoir affaire à trois pointeurs
que le lecteur ne "zappe" la déclaration de l'une des variables (ici, le risque est faible, mais il est beaucoup plus présent dans un code proche de
int mavar1, mavar2, matroisiemevariable, maquatriemevariable, mavariabledifferente;
Partager