有人可以解釋爲什麼以下不起作用?C++翻譯階段混亂
int main() // Tried on several recent C++ '03 compilers.
{
#define FOO L
const wchar_t* const foo = FOO"bar"; // Will error out with something like: "identifier 'L' is undefined."
#undef FOO
}
我認爲預處理是在比字符串文字操作和通用記號翻譯更早的翻譯階段完成的。
豈不編譯器或多或少的看到這一點:
int main()
{
const wchar_t* const foo = L"bar";
}
這將是巨大的,如果有人能舉出從標準的解釋。
當然!謝謝。實際上應該查看預處理過的輸出... – blakecl 2010-04-28 02:26:55
確保在此定義和下一行之間留有空行,否則宏將繼續。過去我曾多次使用這種方法來製作多行宏。 – 2010-04-28 02:40:47
請注意,這不適用於符合預處理器,因爲符合預處理器是基於令牌的。將兩個令牌合併爲一個(例如,「L」和「bar」)的唯一方法是使用連接運算符('##'),它不能作爲替換列表的最後一個符號出現。 – 2010-05-06 01:11:08