L'idiome de retourner la valeur exacte de l'un des arguments (de type pointeur) il existe dans le but de soutenir "l'enchaîné" appels de fonction (voir aussi strcpy
, strcat
etc). Il vous permet d'écrire un code répétitif comme une seule expression de la déclaration au lieu de le diviser en plusieurs états. Par exemple
char buffer[1024];
printf("%s\n", strcat(strcat(strcpy(buffer, "Hello"), " "), "World"));
struct UserData data_copy;
some_function(memcpy(&data_copy, &original_data, sizeof original_data));
Même si vous n'aimez pas ce style d'organisation de code et préfèrent faire de même à travers plusieurs états, la surcharge de retour d'un [inutile] la valeur du pointeur est pratiquement inexistante.
On peut même dire que la valeur de cet idiome a augmenté un peu après l'introduction de littéraux composés en C99. Avec un composé de lterals cette très idiome permet d'écrire le même code sans introduire un nom de variable intermédiaire
printf("%s\n", strcat(strcat(strcpy((char [1024]) { 0 }, "Hello"), " "), "World!"));
some_function(memcpy(&(struct UserData) { 0 }, &original_data, sizeof original_data));
ce qui est logique, puisque dans la plupart des cas, le nom de variable est supposée être de courte durée, n'est pas nécessaire après, et seulement encombre l'espace de noms.