Gunakan __LINE__
, tapi apa tipenya?
LINE Jumlah baris yang diperkirakan (dalam file sumber saat ini) dari baris sumber saat ini (konstanta integer).
Sebagai konstanta integer , kode sering kali dapat mengasumsikan nilainya adalah __LINE__ <= INT_MAX
dan jenisnya adalah int
.
Untuk cetak di C, printf()
membutuhkan specifier yang cocok: "%d"
. Ini adalah perhatian yang jauh lebih kecil di C ++ dengan cout
.
Pedantic concern: Jika nomor baris melebihi INT_MAX
1 (bisa dibayangkan dengan 16-bit int
), mudah-mudahan kompilator akan menghasilkan peringatan. Contoh:
format '%d' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=]
Alternatifnya, kode dapat memaksa tipe yang lebih luas untuk mencegah peringatan tersebut.
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__));
Menghindari printf()
Untuk menghindari semua batasan integer: stringify . Kode dapat langsung dicetak tanpa printf()
panggilan: hal yang baik untuk dihindari dalam penanganan kesalahan 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 Tentu saja praktik pemrograman yang buruk untuk memiliki file sebesar itu, namun mungkin kode yang dihasilkan mesin dapat menjadi tinggi.
2 Dalam debugging, terkadang kode tidak berfungsi seperti yang diharapkan. Memanggil fungsi kompleks seperti *printf()
itu sendiri bisa menimbulkan masalah vs. sederhana fputs()
.