1 2 3 4 5 6
| #include <stdio.h>
int main (void)
{
printf("%d %d %d",1,2,3,4);
return 0;
} |
le compilateur m'indique :
1 2
| main.c: In function 'main':
main.c:4: warning: too many arguments for format |
Il y a bien sûr un argument de trop, là n'est pas le problème. Mais ce que je ne comprends pas, c'est que sachant que "printf" est une fonction pouvant prendre un nombre d'arguments variable et que ce nombre d'arguments qu'elle attend est (je suppose ?) géré par elle-même, qu'elle calcule en analysant et comptant le nombre de "code" de formatage (%d, %f, etc...) dans la chaîne de caractère du premier argument, comment le compilateur peut-il arriver à savoir si cette fonction reçoit bien le nombre d'arguments qu'elle attend, vu qu'il n'est pas censé connaître la fonction, ni la manière dont elle fonctionne ni de savoir comment elle gère ses arguments ? Car logiquement, il n'est pas censé le savoir. En effet, si dans la chaîne de caractères (son premier argument) la fonction voit "%d %d %d", après qu'elle l'ait analysée, elle voit qu'il y a 3 "codes" de formatage et elle attend alors un total de 4 arguments (le premier obligatoire + 3 autres). Mais le compilateur, comment fait-il pour le savoir ?
Par conséquent, pour la fonction "printf" (et peut-être d'autres ?), y a t-il une astuce particulière qui permet au compilateur de compter le nombre d'arguments que la fonction attend réellement ?
Partager