Verwenden Sie __LINE__
, aber was ist sein Typ?
LINE Die angenommene Zeilennummer (innerhalb der aktuellen Quelldatei) der aktuellen Quellzeile (eine Ganzzahlkonstante).
Als Ganzzahlkonstante kann Code häufig annehmen, dass der Wert __LINE__ <= INT_MAX
und damit der Typ ist int
.
Zum Drucken in C wird printf()
der passende Bezeichner benötigt : "%d"
. Dies ist in C ++ ein weitaus geringeres Problem cout
.
Pedantisches Problem: Wenn die Zeilennummer INT_MAX
1 überschreitet (mit 16 Bit etwas denkbar int
), wird der Compiler hoffentlich eine Warnung ausgeben. Beispiel:
format '%d' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=]
Alternativ könnte Code breitere Typen dazu zwingen, solchen Warnungen zuvorzukommen.
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__));
Vermeiden printf()
So vermeiden Sie alle Einschränkungen für Ganzzahlen: stringify . Code kann direkt ohne printf()
Anruf gedruckt werden : eine nette Sache, die Sie bei der Fehlerbehandlung vermeiden sollten 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 Sicherlich schlechte Programmierpraxis, um eine so große Datei zu haben, aber vielleicht kann maschinengenerierter Code hoch gehen.
2 Beim Debuggen funktioniert Code manchmal einfach nicht wie erhofft. Das Aufrufen komplexer Funktionen wie *printf()
kann selbst Probleme verursachen, im Gegensatz zu einfachen fputs()
.