Use __LINE__
, mas qual é o seu tipo?
LINE O número da linha presumida (dentro do arquivo de origem atual) da linha de origem atual (uma constante inteira).
Como uma constante inteira , o código geralmente pode assumir que o valor é __LINE__ <= INT_MAX
e, portanto, o tipo é int
.
Para impressão em C, printf()
precisa o especificador Coincidindo: "%d"
. Esta é uma preocupação muito menor em C ++ com cout
.
Preocupação pedante: Se o número da linha exceder INT_MAX
1 (algo concebível com 16 bits int
), espero que o compilador produza um aviso. Exemplo:
format '%d' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=]
Como alternativa, o código pode forçar tipos mais amplos a evitar esses avisos.
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__));
Evitar printf()
Para evitar todas as limitações de inteiros: stringify . O código pode ser impresso diretamente sem uma printf()
chamada: uma boa coisa a evitar no tratamento de erros 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 Certamente uma prática de programação ruim para ter um arquivo tão grande, mas talvez o código gerado por máquina possa ser alto.
2 Na depuração, às vezes o código simplesmente não funciona como esperado. Chamar funções complexas como *printf()
pode gerar problemas em vez de simples fputs()
.