下面的C++代碼編譯和工作按預期在GCC(4.0.4)預處理程序作爲參數傳遞給其他宏
#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)); */
}
但是程序員,宏導致2010年微軟的Visual C++ Express中的錯誤:
main.cpp中(7):警告C4003:錯誤C2059:用於宏 'FOO'
main.cpp中(7)沒有足夠的實際參數語法錯誤: ')'
問題似乎是,Microsoft編譯器在內部處理BAR宏時,並未將BAZ宏擴展爲可用作宏FOO的兩個單獨參數的參數。
根據標準,哪個編譯器正確處理了這種情況?
看起來像你真正想要的是[variadic宏](http://en.wikipedia.org/wiki/Variadic_macro)。 – leftaroundabout
@leftaroundabout似乎並不像他...... –
@iammilind:標準的第16章中缺少的是什麼?它怎麼不是一個「真正的」標準? –