簡體   English   中英

C宏,帶有表達式不必要的結果

[英]C macro with expression unwanted result

我正在運行以下程序,並得到9為7的結果,我理解了為什么9是輸出,但我不知道為什么我得到7作為輸出。

#include<stdio.h>
#define sqr(i) (i*i)

int main()
{
    printf("%d %d", sqr(3), sqr(3+1));
    return 0;
}

對於第二個函數sqrt(3+1)如何擴展微型以及如何獲得7輸出?

您可以讓編譯器或IDE對該文件進行預處理,並向您展示宏的擴展方式。

在您的情況下sqr(3+1)擴展為(3+1*3+1) 現在,C運算符的優先級意味着乘法在加法之前完成。 所以(3+1*3+1) -> (3+3+1) -> (7)

您可以通過這樣定義宏,並在參數周圍加上括號來解決此問題:

#define sqr(i) ((i)*(i))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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