9Close11
PpHdOn the 2014-01-04 at 12:00pm
A mon tour !

Par habitude (et parce que la plupart du code existant utilise cette forme), j'utilise const char * + char * pour les prototypes de fonction.
Mais je commence à me demander s'il vaut mieux pas utiliser const char [] et char [], pour les raisons que Uther évoque: c'est plus propre, car le prototype de la fonction explicite le fait qu'il attend un tableau et non pas juste un caractère.
Exemple, dans la fonction suivante, on sait de suite quel est le tableau et quelle est la référence :
const int *f(int, const int [], const int *);

Mais çà a des dangers, car même si on écrit
void f(const char str[])
Le type effectif, vu par le compilateur, de str est en fait... const char * ! (cf. http://c-faq.com/aryptr/aryptrparam.html )
Exemple:
void f(const char str[]) {
 printf("Size=%d\n", (int) sizeof(str));
}

affiche Size=8 (taille d'un pointeur sur une architecture 64 bits). Encore plus troublant:
 void f(const char str[1024]) {
 printf("Size=%d\n", (int) sizeof(str));
}

affiche encore Size=8 ! (cf. http://c-faq.com/aryptr/aryparmsize.html )