7
votes

Quel est le type de données d'une constante définie?

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;
}

c

0 commentaires

4 Réponses :


1
votes

c'est non typé; Il suffit de regarder comme une substitution textuelle de votre source: xxx


4 commentaires

Et donc dans ce cas, ils sont efficacement de type int .


@rodrigo exactement (dans ce cas)


Ne devrait pas% F 300 Imprimer 300.00?


@Abhishekkumar C ne convertira pas le paramètre int sur float 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.



3
votes

Dans ce cas, le type est le type des constantes littérales. Les deux 0 et 300 sont des constantes entières qui correspondent à un int , donc leur type est int .


0 commentaires

1
votes

#define 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 xxx

et oui dans ce cas, 0 300 sont des entiers. !


0 commentaires

4
votes

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 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

hideux comme il semble, d'une façon de savoir que vous pouvez obtenir ce que vous cherchez dans ce printf code> est de faire ceci: p>

printf("%ld\n", UPPER);


2 commentaires

Juste une petite impression, % f attend un double pas un float . Mais float est automatiquement favorisé à double 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 =)