Pourquoi est-ce que " “%c”` existent dans `printf` si `char` est converti en int?
En C, vous avez la "%c"
et "%f"
formats de drapeaux pour printf
- et scanf
fonctions similaires. Ces deux fonction de l'utilisation de la longueur variable des arguments ...
, qui toujours convertir floats
à doubles
et chars
à ints
.
Ma question est, si cette conversion se produit, pourquoi faire des drapeaux pour char
et float
existent? Pourquoi ne pas simplement utiliser les mêmes drapeaux, pour int
et double
?
Liés à la question:
Pourquoi ne scanf() a besoin "%lf" pour les doubles, quand printf() est bien avec juste "%f"?
OriginalL'auteur Paul Manta | 2012-01-21
Vous devez vous connecter pour publier un commentaire.
Parce que la façon dont il est imprimé est différent.
float
, si?Le
%f
mise en forme de drapeau s'attend à undouble
argument.OriginalL'auteur Luchian Grigore
Parce que
float
etdouble
avoir différentes représentations machine ou les tailles et les conventions d'appel: nombre de processeurs ont des registres dédiés à virgule flottante qui peut être utilisé pour l'argument de passage.Et le C standard exige que
short
les arguments sont convertis àint
etfloat
les arguments sont convertis àdouble
.ce qui est pertinente à cette question est que les promotions sont toujours appliqués à des varargs. Qui comme vous le dites, est un sous-ensemble des "arguments où la déclaration de la fonction ne spécifie pas le type de paramètre".
OriginalL'auteur Basile Starynkevitch