2012-03-24 67 views
0

爲什麼下面的代碼報告左值所需的錯誤?我們如何編寫一個接收數組和元素數量作爲參數的宏,然後打印出數組的元素?左值需要錯誤與宏

#define arr(b) printf("%d",b++);\ 
       printf("%d",b); 


int main() 
{ 
    arr(5); 
} 
+0

忽略它不「工作」 ......加上括號裏面的一切宏定義!假設它用'arr(6 * 3)'...'調用「#define arr(b)printf(」%d「,(b)++); printf(「%d」,b);' – pmg 2012-03-24 12:39:49

+0

好吧..明白了..有人可以回答問題的其他部分? – user1232138 2012-03-24 12:43:36

回答

1

由於該宏的一部分膨脹以5++,這是無效的C.考慮使用的b+1代替b++

4

如果展開宏,您會收到以下:

int main() 
{ 
    printf("%d",5++); 
    printf("%d",5); 
} 

不能後置恆5,所以你得到一個錯誤。

請記住,宏不是函數。如果你想讓它像一個功能,只需做一個函數:

void arr(int b) { 
    printf("%d",b++); 
    printf("%d",b); 
} 
+3

+1表示「如果你想要一個功能,寫一個功能」。 – 2012-03-24 12:40:34

1

第一左值代表左。

只能分配左值。

當你寫x ++你的意思x = x + 1(你也得到它的價值)。

所以,問題是沒有意義的寫5 = 5 + 1

也許你想做到這一點:

int x = 5; 
arr(x);