ฉันสามารถใช้มาโครใดที่กำหนดไว้ล่วงหน้าเพื่อตรวจจับเสียงดัง


111

ฉันกำลังพยายามตรวจหาคอมไพเลอร์ที่ใช้ในการรวบรวมซอร์สโค้ดของฉัน ฉันสามารถค้นหามาโครที่กำหนดไว้ล่วงหน้าเพื่อตรวจสอบ MSVC หรือ GCC ได้อย่างง่ายดาย (ดูตัวอย่างhttp://predef.sourceforge.net/ ) แต่ฉันไม่พบมาโครใด ๆ เพื่อตรวจสอบเสียงดัง

มีใครรู้บ้างว่าเสียงดังกล่าวกำหนดมาโครเช่น__CLANG__เพื่อที่จะรู้ว่ากำลังรวบรวมโค้ดของฉันอยู่หรือไม่?



คำตอบ:


121

หากต้องการดูรายการมาโครที่กำหนดไว้ล่วงหน้าทั้งหมดที่คอมไพเลอร์ใช้ให้ใช้สิ่งนี้:

clang -dM -E -x c /dev/null

คุณสามารถทำเช่นเดียวกันสำหรับ gcc



41

คำถามนี้ได้รับคำตอบมาหลายปีแล้ว แต่ให้ฉันเพิ่ม (สำหรับการอ้างอิงในอนาคต) ว่าจะทำอย่างไรในWindows :

echo | clang -dM -E -

เช่นเดียวกับ GCC:

echo | gcc -dM -E -

โปรดทราบ: เส้นประสุดท้าย-มีความสำคัญจริงๆ! (มิฉะนั้นคุณจะได้รับerror: no input filesสำหรับคอมไพเลอร์ทั้งสอง)


8
FYI, Windows เทียบเท่า/dev/nullเป็นNUL:
ถูกต้องตามกฎหมาย

@legalize โอ้โฮ! ฉันไม่รู้! มันเจ๋งมาก คุณจะพบที่ใด
MD XF

4
มีมาตั้งแต่สมัย DOS เพียง แต่ผู้ใช้ DOS / Windows ส่วนใหญ่ไม่จำเป็นต้องใช้
ทำให้ถูกต้องตามกฎหมาย

นี่คือสิ่งที่ฉันมักจะทำใน Linux เช่นกัน การพิมพ์/dev/nullเป็นงานมากขึ้น
Peter Cordes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.