ขยายมาโครเพื่อการดีบักหรือไม่

ฉันเพิ่งเริ่มใช้ฟังก์ชันมาโคร และฉันเข้าใจว่ามีข้อผิดพลาดบางประการในการใช้งานเมื่อเป็นเรื่องของลำดับการดำเนินการ มีวิธีขยายมาโครหลังจากที่ตัวประมวลผลล่วงหน้าผ่านไปหรือไม่ เพื่อที่ฉันจะได้เห็นว่ามันมีลักษณะอย่างไร

ใน VS2017 ฉันได้ลองใช้โปรเซสเซอร์ > C/C++ > ตัวประมวลผลล่วงหน้า > การประมวลผลล่วงหน้า ไปยังไฟล์ที่สร้างไฟล์ *.i แต่มีความยาวประมาณ 50,000 บรรทัด และดูเหมือนว่าฉันไม่สามารถค้นหาได้ว่ามาโครของฉันถูกขยายไปที่ใด

แก้ไข: ฉันรู้ว่ามาโครเป็นข่าวร้าย แต่ฐานโค้ดที่ฉันกำลังใช้งานอยู่ค่อนข้างน้อยดังนั้นฉันจึงพยายามทำความเข้าใจพวกเขาให้ดีขึ้น


person Joe    schedule 04.05.2018    source แหล่งที่มา
comment
หากคุณขยายมาโคร คุณจะได้รับโค้ดมากมายให้ดู - หนึ่งในหลายเหตุผลที่คุณไม่ควรใช้มาโคร อย่างน้อยก็ในภาษา C++   -  person    schedule 04.05.2018
comment
เข้าใจแล้ว แต่น่าเสียดายที่ฐานโค้ดที่ฉันก้าวเข้าไปใช้มัน ดังนั้นฉันจึงพยายามหาวิธีทำความเข้าใจมัน   -  person Joe    schedule 04.05.2018
comment
ฉันกำลังใช้ IDE เช่น eclipse คุณสามารถเลื่อนเมาส์ไปวางเหนือมาโครและมันจะขยายในหน้าต่างป๊อปอัป   -  person Galik    schedule 04.05.2018
comment
ฉันใช้ VS2017 เมื่อฉันวางเมาส์เหนือมาโคร มันจะบอกฉันว่าฉันเห็นอะไร   -  person Joe    schedule 04.05.2018
comment
การเพิ่มความคิดเห็นของ @ Galik - คุณสามารถดูการขยายทีละขั้นตอนแล้วเข้าใจคำสั่งซื้อ   -  person SHG    schedule 04.05.2018
comment
คอมไพเลอร์บางตัวมีสวิตช์บรรทัดคำสั่งที่ช่วยให้สามารถทิ้งไฟล์ต้นฉบับที่ประมวลผลล่วงหน้าได้ ตรวจสอบตัวเลือกสำหรับคอมไพเลอร์ของคุณ   -  person Thomas Matthews    schedule 04.05.2018
comment
ตัวเลือกในการสร้างไฟล์ .i นั้นน่าจะเป็นไฟล์ที่ดีที่สุดที่คุณจะได้รับ แต่: การค้นหาคือเพื่อนของคุณ! อ่านไฟล์ในโปรแกรมแก้ไขข้อความที่ดีและค้นหาคำหลักหรือการเรียกใช้ฟังก์ชันที่คุณรู้ว่าใกล้เคียงกับส่วนขยายมาโครที่คุณสนใจ และคุณควรจะสามารถค้นหามันได้   -  person Steve Summit    schedule 04.05.2018
comment
@ThomasMatthews พวกเขาลองแล้ว แต่มีความยาวประมาณ 50,000 บรรทัดและดูเหมือนว่าฉันไม่สามารถหาได้ว่ามาโครของฉันขยายไปที่ใด   -  person Baum mit Augen    schedule 04.05.2018
comment
ฉันยังใหม่กับการใช้ฟังก์ชันมาโคร - เรียนรู้สิ่งนี้ตอนนี้: อย่า ใช้มาโครเลย (ยกเว้นในบางกรณีเท่านั้นที่เป็นตัวเลือกเดียวจริงๆ/น่าเสียดาย)   -  person Jesper Juhl    schedule 04.05.2018
comment
@Steve Summit - แน่นอน ฉันแค่ให้คำแนะนำทั่วไป และแม้แต่แมโครที่สืบทอดมาก็สามารถเขียนใหม่เป็นฟังก์ชันที่เหมาะสมได้ในหลายกรณี ;-)   -  person Jesper Juhl    schedule 04.05.2018
comment
@Steve Summit ในหนังสือของฉันทื่อ == ดี ฉันแค่พยายามจับประเด็น อย่าใช้มาโคร   -  person Jesper Juhl    schedule 04.05.2018


คำตอบ (1)


ใน VS2017 ฉันได้ลองใช้โปรเซสเซอร์ > C/C++ > ตัวประมวลผลล่วงหน้า > การประมวลผลล่วงหน้า ไปยังไฟล์ที่สร้างไฟล์ *.i แต่มีความยาวประมาณ 50,000 บรรทัด และดูเหมือนว่าฉันไม่สามารถค้นหาได้ว่ามาโครของฉันขยายไปที่ใด

คุณสามารถช่วยเหลือตัวเองได้ด้วยการประกาศตัวแปรจำลองก่อนบรรทัดที่ใช้แมโคร

E.g.

extern int dummyIntVariable;
MY_COMPLICATED_MACRO(arg1, arg2);

หลังจากนั้น คุณมองหา dummyIntVariable ในไฟล์ .i บรรทัดด้านล่างจะมีสิ่งที่ MY_COMPLICATED_MACRO ขยายเป็น

หรือตามที่ @Sneftel ชี้ให้เห็นในความคิดเห็น คุณสามารถใช้สตริงเก่าๆ ที่ช่วยคุณนำทางไปยังไฟล์ .i ได้

THIS IS A UNIQUE STRING
MY_COMPLICATED_MACRO(arg1, arg2);

เนื่องจากไฟล์จะได้รับการประมวลผลล่วงหน้า จึงควรใช้งานได้เช่นกัน

person R Sahu    schedule 04.05.2018
comment
หากคุณเพียงแต่ประมวลผลล่วงหน้า คุณไม่จำเป็นต้องประกาศตัวแปรจำลองด้วยซ้ำ - person Sneftel; 04.05.2018
comment
@Sneftel ตัวแปรจำลองมีประโยชน์สำหรับการนำทางผ่านบรรทัด 50k ที่ OP เห็นในไฟล์ .i - person R Sahu; 04.05.2018
comment
ไม่ ฉันหมายถึงว่าโค้ดไม่จำเป็นต้องคอมไพล์ เพียงแค่ประมวลผลล่วงหน้าเท่านั้น คุณสามารถใส่ THIS IS A UNIQUE STRING และ grep เพื่อสิ่งนั้น - person Sneftel; 04.05.2018
comment
@Sneftel ฉันเห็นแล้ว ใช่นั่นก็เป็นทางเลือกเช่นกัน - person R Sahu; 04.05.2018