ใช้__LINE__
แต่ล่ะประเภท?
LINEหมายเลขบรรทัดที่สันนิษฐาน (ภายในซอร์สไฟล์ปัจจุบัน) ของบรรทัดต้นทางปัจจุบัน (ค่าคงที่จำนวนเต็ม)
ในฐานะที่เป็นเลขคงรหัสมักจะถือว่ามีค่าเป็น__LINE__ <= INT_MAX
และอื่น ๆ int
ประเภทคือ
จะพิมพ์ใน C, ต้องการระบุตรงกัน:printf()
"%d"
นี่คือความกังวลไกลน้อยใน C ++ cout
ด้วย
ความกังวลเกี่ยวกับ Pedantic:หากหมายเลขบรรทัดเกินINT_MAX
1 (เป็นไปได้บ้างกับ 16 บิตint
) หวังว่าคอมไพเลอร์จะแจ้งเตือน ตัวอย่าง:
format '%d' expects argument of type 'int', but argument 2 has type 'long int' [-Wformat=]
อีกวิธีหนึ่งรหัสอาจบังคับให้ประเภทที่กว้างขึ้นเพื่อป้องกันคำเตือนดังกล่าว
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__));
หลีกเลี่ยง printf()
เพื่อหลีกเลี่ยงข้อ จำกัด จำนวนเต็มทั้งหมด: stringify รหัสสามารถพิมพ์ได้โดยตรงโดยไม่ต้องprintf()
โทร: เป็นสิ่งที่ดีที่จะหลีกเลี่ยงในการจัดการข้อผิดพลาด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การเขียนโปรแกรมที่ไม่ดีอย่างแน่นอนที่จะมีไฟล์ขนาดใหญ่เช่นนี้ แต่บางทีโค้ดที่เครื่องสร้างขึ้นอาจสูง
2ในการดีบักบางครั้งโค้ดก็ไม่ทำงานตามที่หวังไว้ โทรฟังก์ชั่นที่ซับซ้อนเช่นสามารถตัวเองปัญหาเกิดขึ้นเมื่อเทียบกับที่เรียบง่าย*printf()
fputs()