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__) แต่มีวิธีที่เป็นไปตามมาตรฐานในการรับพฤติกรรมนี้หรือไม่? บางทีใช้มาโครหลายตัว? ตอนนี้##รุ่นดูเหมือนจะได้รับการสนับสนุนอย่างดี (อย่างน้อยบนแพลตฟอร์มของฉัน) …