2011-08-17 3 views
0

ce sera la sortie: (et pourquoi)prédiction sortie

printf("%d",2.37); 

Apparemment, printf est une fonction variadique et nous ne pouvons jamais connaître le type d'une liste d'arguments variable. donc nous devons toujours spécifier les spécificateurs de format manuellement. donc, 2,37 serait stocké comme double selon les normes IEEE serait récupéré et imprimé en format entier. Mais la sortie est 0. Quelle est la raison?

+1

avertissement: le format '% d' attend le type 'int', mais l'argument 2 a le type 'double' - j'obtiens cet avertissement et son impression une autre valeur et non 0. – hari

+0

GCC 64bit: -709751640, GCC 32bit: -1889785610, ICC 64bit: 0, clang: 2056828904 ... Tous donnent un avertissement sans même les demander. – Mat

Répondre

3

Il s'agit d'un comportement indéfini. Vous passez un argument double à une fonction qui s'attend à récupérer un int à partir de ses macros varargs, et il est impossible de dire à quoi cela va mener. En théorie, il peut même tomber en panne (avec une convention d'appel qui spécifie que les arguments variés de différents types sont transmis de différentes manières ou sur des piles différentes).

Questions connexes