簡體   English   中英

在宏中傳遞參數評估方向

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM