J'essayais ce code.
#include <stdio.h>
#include <stdlib.h>
#define LOWER 0
#define UPPER 300
int main()
{
printf("%d %f",LOWER,UPPER);
return 0;
}
4 Réponses :
c'est non typé; Il suffit de regarder comme une substitution textuelle de votre source:
Et donc dans ce cas, ils sont efficacement de type int code>.
@rodrigo exactement (dans ce cas)
Ne devrait pas% F 300 Imprimer 300.00?
@Abhishekkumar C ne convertira pas le paramètre int code> sur float code> pour vous dans ce cas. Il y a un avertissement de compilateur pour vous informer si le spécificateur de format ne correspond pas au paramètre. Ceci est une source courante de bugs, lorsqu'elle n'est pas vérifiée par le compilateur.
Dans ce cas, le type est le type des constantes littérales. Les deux 0 code> et 300 code> sont des constantes entières qui correspondent à un int code>, donc leur type est int code>. P >
et oui dans ce cas, 0 300 sont des entiers. ! p> p> #define code> est un Directive du préprocesseur . Après la compilation, cela n'existe pas. Au lieu de cela, les valeurs correspondantes seront remplacées dans le code. Dans ce cas, le code réel compilé après l'expansion macro est
Dans votre exemple, les deux sont poussés dans la liste des paramètres variadique de printf comme valeurs int. Cela peut causer des problèmes avec les drapeaux de format dans la chaîne de format hideux comme il semble, d'une façon de savoir que vous pouvez obtenir ce que vous cherchez dans ce printf () code> ne correspond pas au type sous-jacent. Reportez-vous à ce poste pour des raisons . Pourquoi un comportement non défini peut s'ensuivre printf code> est de faire ceci: p> printf("%ld\n", UPPER);
Juste une petite impression, % f code> attend un double code> pas un float code>. Mais float code> est automatiquement favorisé à double code> dans ce cas, donc aucun mal n'est effectué.
@Jensgustedt remercie Jens. Montre à quelle fréquence je travaille avec des flotteurs = p. Tout ce que je sais généralement, c'est qu'ils sont généralement plus grands qu'un int =)