爲什麼下面的代碼報告左值所需的錯誤?我們如何編寫一個接收數組和元素數量作爲參數的宏,然後打印出數組的元素?左值需要錯誤與宏
#define arr(b) printf("%d",b++);\
printf("%d",b);
int main()
{
arr(5);
}
爲什麼下面的代碼報告左值所需的錯誤?我們如何編寫一個接收數組和元素數量作爲參數的宏,然後打印出數組的元素?左值需要錯誤與宏
#define arr(b) printf("%d",b++);\
printf("%d",b);
int main()
{
arr(5);
}
由於該宏的一部分膨脹以5++
,這是無效的C.考慮使用的b+1
代替b++
。
如果展開宏,您會收到以下:
int main()
{
printf("%d",5++);
printf("%d",5);
}
不能後置恆5
,所以你得到一個錯誤。
請記住,宏不是函數。如果你想讓它像一個功能,只需做一個函數:
void arr(int b) {
printf("%d",b++);
printf("%d",b);
}
+1表示「如果你想要一個功能,寫一個功能」。 – 2012-03-24 12:40:34
第一升在左值代表左。
只能分配左值。
當你寫x ++
你的意思x = x + 1
(你也得到它的價值)。
所以,問題是沒有意義的寫5 = 5 + 1
也許你想做到這一點:
int x = 5;
arr(x);
忽略它不「工作」 ......加上括號裏面的一切宏定義!假設它用'arr(6 * 3)'...'調用「#define arr(b)printf(」%d「,(b)++); printf(「%d」,b);' – pmg 2012-03-24 12:39:49
好吧..明白了..有人可以回答問題的其他部分? – user1232138 2012-03-24 12:43:36