2014-01-08 43 views
0
#include <iostream> 
#define help(a) #a 
#define xhelp(a) help(a) 
#define glue(a,b) a##b 
#define xglue(a,b) glue(a,b) 
#define HIGHLOW "hello" 
#define LOWLOW ",world" 
int main() 
{ 
       std::cout<<xhelp(xglue(HIGH,LOW))<<std::endl; 
       return 0; 
} 

這裏是我的測試代碼。我想知道MACOR xglue(高,低)的傳播。關於遞歸宏觀傳播的結果是什麼?

對於我來說,我認爲結果是「你好」

,但我從一個網站學習,結果是「你好,世界」。

我真的很困惑。

我的代碼的結果是aslo「你好」。

有沒有人可以幫助我呢?

我認爲xgule(HIGH,LOW)=膠(HIGH,LOW)= HIGHLOW = 「你好」

的網站顯示,xglue(HIGH,LOW)=膠(HIGH,LOW 「世界」 )=「你好,世界」

+0

結果:'「\」hello \「」' – BLUEPIXY

+0

結果是'「hello」'。張貼wesite鏈接。 – sujin

+0

這是一箇中文網站。在網站結尾處http://hi.baidu.com/feixue/item/b22cdca63f778417a9cfb729 – user2701639

回答

0

首先,沒有遞歸宏。

該示例中的大部分工作由兩個預處理運算符###執行。

#是一個一元運算符,將其參數轉換爲字符串文字。

##是一個二元運算符,它將兩個令牌粘貼在一起形成一個令牌。

檢查給定的預處理器代碼擴展到的最簡單方法實際上是運行預處理器。 g++編譯器有一個-E選項來做到這一點。

# Assuming your file is saved as code.cpp 
$ g++ -E code.cpp 
... lots of output ... 
int main() 
{ 
    std::cout<<"\"hello\""<<std::endl; 
    return 0; 
}