2014-03-02 83 views
3

我需要在這個C++代碼是如何表現和返回值需要解釋過的C++代碼

#include<iostream> 
using namespace std; 
#define MY_MACRO(n) #n 
#define SQR(x) x * x 
int main() 
{ 
    //cout<<MY_MACRO(SQR(100))<<endl; 
    //cout<< sizeof(SQR(100))<<endl; 
    cout<< sizeof(MY_MACRO(SQR(100)))<<endl; 

    return 0; 
} 

據我所關注的一點解釋的行爲#n返回在MY_MACRO(n)但如果之前的參數個數這SQR(100)100 * 100更換(9個字符,如果再算上空格),但現在sizeof(9)應打印4,但其與cout<< sizeof(MY_MACRO(SQR(100)))<<endl;

什麼是它背後的抓回來9?

+0

每個字符都被當作一個字節。 –

+0

看看預處理器的輸出(如果你使用g ++:g ++ -E)。然後你會看到cout << sizeof(「SQR(100)」)<< endl; –

+0

@Rikayan但在這裏,如果你看到宏將取代100 * 100到9('MY_MACRO(n)#n'),所以它將是sizeof(9) –

回答

6

您沒有使用#n的正確定義。這不是參數的數量。它使它成爲一個字符串。

+0

噢,那麼它解決了我的查詢,並在我的腦海中創建了另外1個問題。 宏是否可以在字符串上工作?像'「SQR(100)」'會被上面的字符串替換,即'100 * 100'嗎? –

+0

在我的腦海裏,你能請另一個神祕的幫助嗎? –

+0

不,宏不會觸及字符串文字。如果你想這樣做,你必須首先修改「字符串」,然後將其作爲文字。 – Mario

6

宏替換後的代碼將被轉換爲

sizeof("SQR(100)");

這將給9包括終止'\0'字符串文字的大小。

#n將使參數作爲字符串,其不參數

的數量例如:

#define display(n) printf("Result" #n " = %d", Result##n) 
int Result99 = 78; 

display(99) ; // Will output -> Result99 = 78 
+0

但SQR(100)將不會被替換爲「100 * 100」嗎? –

+0

@SaurabhSharma查看更新的答案 – P0W