คำถามติดแท็ก c-preprocessor

ตัวประมวลผลแมโครแบบข้อความที่ใช้ก่อนคอมไพล์โปรแกรมภาษา C และ C ++ แท็กนี้ยังสามารถใช้สำหรับคำถามเกี่ยวกับคอมไพเลอร์ / ภาษาอื่น ๆ ที่มาจากหรือที่มีคุณสมบัติเหมือนกันเช่น #directives ใน Objective-C หรือ C #

19
#ifdef vs #if - วิธีใดดีกว่า / ปลอดภัยกว่าสำหรับวิธีการเปิด / ปิดการรวบรวมโค้ดบางส่วน
นี่อาจเป็นเรื่องของรูปแบบ แต่มีความแตกแยกเล็กน้อยในทีม dev ของเราและฉันสงสัยว่ามีใครมีความคิดเกี่ยวกับเรื่องนี้บ้าง ... โดยทั่วไปเรามีคำสั่งพิมพ์ดีบักซึ่งเราปิดในระหว่างการพัฒนาตามปกติ โดยส่วนตัวแล้วฉันชอบทำสิ่งต่อไปนี้: //---- SomeSourceFile.cpp ---- #define DEBUG_ENABLED (0) ... SomeFunction() { int someVariable = 5; #if(DEBUG_ENABLED) printf("Debugging: someVariable == %d", someVariable); #endif } บางทีมชอบสิ่งต่อไปนี้: // #define DEBUG_ENABLED ... SomeFunction() { int someVariable = 5; #ifdef DEBUG_ENABLED printf("Debugging: someVariable == %d", someVariable); #endif } ... วิธีใดที่เหมาะกับคุณมากกว่าและเพราะเหตุใด …


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

10
หมายเลขบรรทัด C / C ++
เพื่อวัตถุประสงค์ในการดีบักฉันสามารถรับหมายเลขบรรทัดในคอมไพเลอร์C / C ++ ได้หรือไม่ (วิธีมาตรฐานหรือวิธีเฉพาะสำหรับคอมไพเลอร์บางตัว) เช่น if(!Logical) printf("Not logical value at line number %d \n",LineNumber); // How to get LineNumber without writing it by my hand?(dynamic compilation)

6
gcc สามารถส่งออกรหัส C หลังจากประมวลผลล่วงหน้าได้หรือไม่?
ฉันใช้ไลบรารีโอเพ่นซอร์สซึ่งดูเหมือนว่าจะมีคำสั่งก่อนการประมวลผลจำนวนมากเพื่อรองรับหลายภาษานอกเหนือจากภาษา C เพื่อที่ฉันจะได้ศึกษาว่าห้องสมุดกำลังทำอะไรอยู่ฉันต้องการดูรหัส C ที่ฉันรวบรวมหลังจากการประมวลผลล่วงหน้า เหมือนสิ่งที่ฉันเขียน gcc (หรือเครื่องมืออื่น ๆ ที่มีอยู่ทั่วไปใน Linux) สามารถอ่านไลบรารีนี้ได้ แต่เอาท์พุทโค้ด C ที่มีการประมวลผลล่วงหน้าแปลงเป็นอะไรก็ได้และมนุษย์ยังอ่านได้ด้วย?

7
จุลภาคในมาโคร C / C ++
สมมติว่าเรามีมาโครแบบนี้ #define FOO(type,name) type name ซึ่งเราสามารถใช้เช่น FOO(int, int_var); แต่ไม่ง่ายอย่างนั้นเสมอไป: FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2 แน่นอนเราทำได้: typedef std::map<int, int> map_int_int_t; FOO(map_int_int_t, map_var); // OK ซึ่งไม่ถูกหลักสรีรศาสตร์ ต้องจัดการกับความเข้ากันไม่ได้ของประเภทบวก มีความคิดอย่างไรในการแก้ไขปัญหานี้ด้วยมาโคร
104 c++  c  macros  c-preprocessor 


7
มีวิธีแบบพกพาในการพิมพ์ข้อความจากตัวประมวลผลล่วงหน้า C หรือไม่?
ฉันต้องการที่จะทำสิ่งที่ชอบ #print "C Preprocessor got here!" เพื่อวัตถุประสงค์ในการดีบัก วิธีใดที่ดีที่สุด / พกพาสะดวกที่สุดในการทำเช่นนี้

8
วิธีกำหนดสัญลักษณ์พรีโปรเซสเซอร์ใน Xcode
เป็นไปได้ไหมที่จะตั้งค่าสัญลักษณ์สำหรับการคอมไพล์ตามเงื่อนไขโดยการตั้งค่าคุณสมบัติในโปรเจ็กต์ Xcode จุดมุ่งหมายของฉันคือการสร้างสัญลักษณ์ที่พร้อมใช้งานสำหรับไฟล์ทั้งหมดโดยไม่ต้องใช้การนำเข้า / รวมเพื่อให้ชุดของคลาสทั่วไปสามารถมีลักษณะการทำงานพิเศษในบางโปรเจ็กต์ เช่นเดียวกับต่อไปนี้ แต่มีสัญลักษณ์ของฉันเอง #if TARGET_IPHONE_SIMULATOR ... #endif

4
บทบาทของ #ifdef และ #ifndef
#define one 0 #ifdef one printf("one is defined "); #ifndef one printf("one is not defined "); ในการนี้สิ่งที่เป็นบทบาทของ#ifdefและ#ifndefและสิ่งที่ส่งออกหรือไม่

12
ตัวประมวลผลล่วงหน้า C ++ __VA_ARGS__ จำนวนอาร์กิวเมนต์
คำถามง่ายๆที่หาคำตอบในเน็ตไม่ได้ ในมาโครอาร์กิวเมนต์ตัวแปรจะหาจำนวนอาร์กิวเมนต์ได้อย่างไร ฉันโอเคกับบูสต์พรีโปรเซสเซอร์หากมีวิธีแก้ปัญหา ถ้ามันสร้างความแตกต่างฉันกำลังพยายามแปลงจำนวนอาร์กิวเมนต์มาโครที่แปรผันเพื่อเพิ่มลำดับตัวประมวลผลล่วงหน้ารายการหรืออาร์เรย์สำหรับการประมวลผลใหม่เพิ่มเติม

4
Pragma ในกำหนดมาโคร
มีวิธีบางอย่างในการฝังคำสั่ง pragma ในมาโครด้วยคำสั่งอื่น ๆ หรือไม่? ฉันพยายามที่จะบรรลุสิ่งที่ต้องการ: #define DEFINE_DELETE_OBJECT(type) \ void delete_ ## type_(int handle); \ void delete_ ## type(int handle); \ #pragma weak delete_ ## type_ = delete_ ## type ฉันโอเคกับโซลูชันการเพิ่มประสิทธิภาพ (บันทึกสำหรับคลื่น) ถ้ามีอยู่

9
การเยื้อง #defines
ฉันรู้ว่า#defines ฯลฯ ปกติไม่เคยเยื้อง ทำไม? ฉันกำลังทำงานกับโค้ดบางตัวในขณะนี้ซึ่งมีส่วนผสมที่น่ากลัวของ#defines, #ifdefs, #elses, #endifs และอื่น ๆ ทั้งหมดนี้มักจะผสมกับรหัส C ปกติ การไม่เยื้อง#defines ทำให้อ่านยาก และส่วนผสมของโค้ดเยื้องกับ#defines ที่ไม่เยื้องเป็นฝันร้าย ประโยชน์ของการไม่เยื้อง#defines คืออะไร? มันทำให้ฉันเป็นคนไม่ดีหรือเปล่าถ้าฉันเยื้องย่างเข้าไป นี่ไม่ดีกว่านี้เหรอ? #ifdef SDCC #if DEBUGGING == 1 #if defined (pic18f2480) #define FLASH_MEMORY_END 0x3DC0 #elif defined (pic18f2580) #define FLASH_MEMORY_END 0x7DC0 #else #error "Can't set up flash memory end!" #endif #else #if …

2
## (แฮชคู่) ทำอะไรในคำสั่งพรีโปรเซสเซอร์
#define DEFINE_STAT(Stat) \ struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat; บรรทัดด้านบนมาจาก Unreal 4 และฉันรู้ว่าฉันสามารถถามมันได้ในฟอรัมที่ไม่จริง แต่ฉันคิดว่านี่เป็นคำถาม C ++ ทั่วไปที่รับประกันว่าถูกถามที่นี่ ฉันเข้าใจว่าบรรทัดแรกกำหนดมาโคร แต่ฉันไม่ชำนาญในเชนานิแกนของตัวประมวลผลล่วงหน้าใน C ++ ดังนั้นฉันจึงหลงทางตรงนั้น ตรรกะบอกฉันว่าแบ็กสแลชหมายความว่าการประกาศจะดำเนินต่อไปในบรรทัดถัดไป FThreadSafeStaticStat ดูเหมือนเทมเพลต แต่มี # เกิดขึ้นที่นั่นและไวยากรณ์ที่ฉันไม่เคยเห็นมาก่อนใน C ++ มีใครบอกฉันได้ไหมว่านี่หมายถึงอะไร ฉันเข้าใจว่าคุณอาจไม่มีสิทธิ์เข้าถึง Unreal 4 แต่เป็นเพียงไวยากรณ์ที่ฉันไม่เข้าใจ

14
ปัญหาการคอมไพล์สร้างหรือเก็บถาวรด้วย Xcode 4 (และการอ้างอิง)
คำถามนี้มีการพัฒนาในช่วงหลายสัปดาห์ที่ผ่านมาเพื่อให้ครอบคลุมประเด็นทั่วไปมากขึ้นด้วย xcode4 (และการอัปเกรดโครงการในรูปแบบเก่ากว่า xcodes). อย่างไรก็ตามหลายปัญหาสามารถแก้ไขได้โดยทำตามคำแนะนำชุดเดียวกัน หากคุณมีปัญหาใด ๆ ต่อไปนี้ให้ลองใช้วิธีการในคำตอบที่ยอมรับ: Xcode 4 ไม่สามารถจัดเก็บแอปได้ Xcode 4 สร้างที่เก็บถาวรที่ใช้ไม่ได้ Xcode 4 ไม่ได้สร้าง. ipa Xcode 4 ไม่สามารถคอมไพล์ได้เนื่องจากข้อผิดพลาดของตัวประมวลผลล่วงหน้า Xcode 4 ไม่พบส่วนหัว รหัสของ Xcode 4 ไม่ทำงาน การพึ่งพาโครงการจะไม่รวบรวม การเพิ่มการพึ่งพาทำให้เกิดปัญหาข้างต้น คำถามเดิม หัวข้อ: "ไม่พบไฟล์ปัญหาคำศัพท์หรือตัวประมวลผลล่วงหน้า" ใน Xcode 4 ฉันมีโครงการใน Xcode 4 ที่จะสร้างได้ดีและทำงานบนอุปกรณ์และโปรแกรมจำลอง แต่เมื่อพยายามจัดเก็บข้อผิดพลาดเมื่อค้นหาไฟล์ส่วนหัวที่เกี่ยวข้องกับไลบรารีแบบคงที่: In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15: In file included from …

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