問題很簡單,我只是無法通過第二次宏擴展,它在Visual Studio 2013和2015上報告錯誤,但在GCC和Clang上運行良好。C++預處理器延遲擴展問題
#include <iostream>
#define KS_MACRO_TAIL(A, ...) __VA_ARGS__
#define KS_MACRO_DELAY(M, ...) M(__VA_ARGS__)
int main()
{
int XX = 1;
std::cout << KS_MACRO_TAIL (_, XX) << std::endl;
std::cout << KS_MACRO_DELAY (KS_MACRO_TAIL, _, XX);
}
Visual Studio中生成以下等價的:
int main()
{
int XX = 1;
std::cout << XX << std::endl;
std::cout << ;
}
凡std::cout << ;
是一個語法錯誤,但上述說法是正確的。
什麼所報告的錯誤? –
可以在gcc 5.4.0上使用'gcc -E'(兩行都擴展爲'XX'),所以推測VS是特定的。編譯器錯誤將取決於您使用宏的上下文,因此請[編輯您的問題](https://stackoverflow.com/posts/38975545/edit)來顯示如何使用'KS_MACRO_DELAY',正如@ScottHunter所說的那樣,正是報告了什麼錯誤。 – cxw