[英]Passing parameters evaluation direction in macro
正如我在C語言中所知道的那樣,函數求值的實際參數的傳遞從最右邊開始,並指向左邊。 帶參數的宏定義是什么情況? 我編寫了一個代碼以使含義更清楚,但是輸出使我感到困惑……這是代碼。
#define parsing(a,b) a*b
int parsefun(int a, int b)
{
return a*b;
}
int main()
{
int i=10;
printf("%d\n",parsing((i++),i));
i=10;
printf("%d\n",parsing(i,(i++)));
i=10;
printf("%d\n",parsefun((i++),i));
i=10;
printf("%d\n",parsefun(i,(i++)));
system("PAUSE");
return 0;
}
此代碼輸出100100100110
我希望宏的輸出與功能相同。 但是關鍵點在哪里?
函數實際參數的解析從最右邊開始,並指向左邊
我認為您的意思是“評估”而不是“分析”。 但這不是事實,C標准沒有指定順序。
因此,您所獲得的功能行為未由C標准指定 。
我希望宏的輸出與功能相同
不評估宏參數,它們只是被替換。 因此,您最終得到以下結果:
int i=10;
printf("%d\n", (i++) * i);
i=10;
printf("%d\n", i * (i++));
之后,您只是看到未定義的行為 ,如以下問題所述: 為什么這些構造(使用++)未定義的行為? 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.