Utilisation __LINE__
, mais quel est son type?
LINE Le numéro de ligne présumé (dans le fichier source actuel) de la ligne source actuelle (une constante entière).
En tant que constante entière , le code peut souvent supposer que la valeur est __LINE__ <= INT_MAX
et donc le type est int
.
Pour imprimer en C, a printf()
besoin du prescripteur correspondant: "%d"
. C'est une préoccupation bien moindre en C ++ avec cout
.
Inquiétude pédante: si le numéro de ligne dépasse INT_MAX
1 (quelque peu concevable avec 16 bits int
), espérons que le compilateur produira un avertissement. Exemple:
format '%d' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=]
Sinon, le code pourrait forcer des types plus larges à prévenir de tels avertissements.
printf("Not logical value at line number %ld\n", (long) __LINE__);
//or
#include <stdint.h>
printf("Not logical value at line number %jd\n", INTMAX_C(__LINE__));
Éviter printf()
Pour éviter toutes les limitations d'entiers: stringify . Le code pourrait s'imprimer directement sans printf()
appel: une bonne chose à éviter dans la gestion des erreurs 2 .
#define xstr(a) str(a)
#define str(a) #a
fprintf(stderr, "Not logical value at line number %s\n", xstr(__LINE__));
fputs("Not logical value at line number " xstr(__LINE__) "\n", stderr);
1 Pratique de programmation certainement médiocre pour avoir un fichier aussi volumineux, mais peut-être que le code généré par la machine peut devenir élevé.
2 Lors du débogage, il arrive que le code ne fonctionne tout simplement pas comme prévu. L'appel de fonctions complexes comme *printf()
peut entraîner des problèmes par rapport à un simple fputs()
.