คำถามติดแท็ก variadic-macros

10
ทางเลือกมาตรฐานของเคล็ดลับ ## __ VA_ARGS__ ของ GCC?
มีปัญหาที่รู้จักกันดี กับ args ที่ว่างเปล่าสำหรับแมโคร variadic ใน C99 ตัวอย่าง: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); การใช้งานBAR()ด้านบนนั้นไม่ถูกต้องตามมาตรฐาน C99 เนื่องจากจะขยายเป็น: printf("this breaks!",); สังเกตเครื่องหมายจุลภาคต่อท้าย - ใช้งานไม่ได้ คอมไพเลอร์บางตัว (เช่น: Visual Studio 2010) จะกำจัดเครื่องหมายจุลภาคที่ต่อท้ายให้คุณอย่างเงียบ ๆ คอมไพเลอร์อื่น ๆ (เช่น: GCC) รองรับการวางไว้##ด้านหน้า__VA_ARGS__เช่น: #define BAR(fmt, ...) printf(fmt, ##__VA_ARGS__) แต่มีวิธีที่เป็นไปตามมาตรฐานในการรับพฤติกรรมนี้หรือไม่? บางทีใช้มาโครหลายตัว? ตอนนี้##รุ่นดูเหมือนจะได้รับการสนับสนุนอย่างดี (อย่างน้อยบนแพลตฟอร์มของฉัน) …

12
ตัวประมวลผลล่วงหน้า C ++ __VA_ARGS__ จำนวนอาร์กิวเมนต์
คำถามง่ายๆที่หาคำตอบในเน็ตไม่ได้ ในมาโครอาร์กิวเมนต์ตัวแปรจะหาจำนวนอาร์กิวเมนต์ได้อย่างไร ฉันโอเคกับบูสต์พรีโปรเซสเซอร์หากมีวิธีแก้ปัญหา ถ้ามันสร้างความแตกต่างฉันกำลังพยายามแปลงจำนวนอาร์กิวเมนต์มาโครที่แปรผันเพื่อเพิ่มลำดับตัวประมวลผลล่วงหน้ารายการหรืออาร์เรย์สำหรับการประมวลผลใหม่เพิ่มเติม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.