เป็นไปได้หรือไม่ที่จะใช้ตัวประมวลผลล่วงหน้า C / C ++ เพื่อนับบรรทัดภายในไฟล์ต้นฉบับไปเป็นมาโครหรือค่าคอมไพล์เวลาที่รวบรวมได้ เช่นฉันสามารถแทนที่MAGIC1
, MAGIC2
และMAGIC3
ในต่อไปนี้และได้รับค่า 4 อย่างใดเมื่อใช้MAGIC3
?
MAGIC1 // can be placed wherever you like before the relevant
// lines - either right before them, or in global scope etc.
foo(); MAGIC2
bar(); MAGIC2
baz(); MAGIC2
quux(); MAGIC2
// ... possibly a bunch of code here; not guaranteed to be in same scope ...
MAGIC3
หมายเหตุ:
- ส่วนขยายคอมไพเลอร์เฉพาะสำหรับความสามารถของตัวประมวลผลล่วงหน้าเป็นที่ยอมรับ แต่ไม่พึงประสงค์
- หากเป็นไปได้ด้วยความช่วยเหลือของ C ++ บางตัวซึ่งตรงข้ามกับ C, สร้างมันก็เป็นที่ยอมรับ แต่ไม่เป็นที่พึงปรารถนา (เช่นฉันต้องการบางสิ่งที่เหมาะกับ C)
- เห็นได้ชัดว่าสิ่งนี้สามารถทำได้โดยการเรียกใช้ไฟล์ต้นฉบับผ่านสคริปต์โปรเซสเซอร์ภายนอกบางตัว แต่นั่นไม่ใช่สิ่งที่ฉันขอ
__COUNTER__
และ / หรือBOOST_PP_COUNTER
?
int arr[MAGIC4]
และรับจำนวนบรรทัดในบางส่วนก่อนหน้านี้นับรหัสของฉัน
__LINE__
ที่แสดงถึงจำนวนบรรทัดปัจจุบัน