Et puis, il y a le C, qui utilise le "+" comme opérateur d'addition de pointeur avec un nombre, et il sort une réponse presque logique : "a".
Euh, non, dans l’exemple donné le programme C sort une valeur qui, sauf erreur de ma part, devrait être l’adresse de la chaîne "3a" incrémentée de 1.
Ce qui correspond à ce qui est attendu d’après le standard C (section 6.5.6, §4 : When an expression that has integer type is added to or subtracted from a pointer, the result has the type of the pointer operand).
D’ailleurs, l’avertissement du compilateur (aussi bien gcc que clang) ne concerne pas le fait d’additionner un entier et un pointeur (il n’y a pas lieu d’avertir de quoi que ce soit puisque c’est quelque chose de prévu par le standard), mais la discordance entre le type attendu d’après la chaîne de format ("%d", soit un entier) et le type de l’expression correspondante (pointeur, conformément à la règle sus-citée). Un appel de la forme printf("%p", 1 + "3a") ne provoque aucun avertissement.
[^] # Re: Le but ?
Posté par gouttegd . En réponse au journal Un print(1 + "3a"), ça nous inspire comment ?. Évalué à 7.
Euh, non, dans l’exemple donné le programme C sort une valeur qui, sauf erreur de ma part, devrait être l’adresse de la chaîne "3a" incrémentée de 1.
Ce qui correspond à ce qui est attendu d’après le standard C (section 6.5.6, §4 : When an expression that has integer type is added to or subtracted from a pointer, the result has the type of the pointer operand).
D’ailleurs, l’avertissement du compilateur (aussi bien gcc que clang) ne concerne pas le fait d’additionner un entier et un pointeur (il n’y a pas lieu d’avertir de quoi que ce soit puisque c’est quelque chose de prévu par le standard), mais la discordance entre le type attendu d’après la chaîne de format ("%d", soit un entier) et le type de l’expression correspondante (pointeur, conformément à la règle sus-citée). Un appel de la forme
printf("%p", 1 + "3a")ne provoque aucun avertissement.