CáC++ mã C sau biên dịch và hoạt động như các lập trình viên có ý định trên GCC (4.0.4)macro Preprocessor như tham số cho macro khác
#define FOO(x,y,z) ((x)*(y)*(z))
#define BAR(x) FOO(x,1)
#define BAZ 3,7
int main()
{
return BAR(BAZ); /* interpreted as return ((3)*(7)*(1)); */
}
Tuy nhiên, các macro gây ra một lỗi trên Microsoft Visual C++ nhanh 2010:
main.cpp (7): C4003 cảnh báo: không đủ các thông số thực tế cho macro 'foo'
main.cpp (7): lỗi C2059: lỗi cú pháp: ')'
Vấn đề có vẻ là trình biên dịch Microsoft, trong khi xử lý macro BAR bên trong, không mở rộng macro BAZ thành các tham số có thể được sử dụng làm hai tham số riêng biệt cho macro FOO.
Theo tiêu chuẩn, trình biên dịch xử lý tình huống chính xác?
Có vẻ như những gì bạn đang thực sự tìm kiếm là [Macro biến thể] (http://en.wikipedia.org/wiki/Variadic_macro). – leftaroundabout
@leftaroundabout nó không có vẻ như ông là ... –
@iammilind: Những gì còn thiếu trong chương 16 của tiêu chuẩn? Làm thế nào nó không phải là một tiêu chuẩn 'thực'? –