簡體   English   中英

循環內的宏和函數

[英]macros and function within loop

#define SUM(x,y) ((x)+(y))
void print(){
  for(int i=0;i<10;i++)
    printf("sum=%d\n", SUM(i,i+1));
}

使用上面的宏SUM有什么好處? 我讀到,當內部有一個函數調用循環時,宏非常有用。

對於非常簡單的計算,調用函數可能比實際的計算本身具有更多的開銷。 在一個循環中,情況甚至更糟。

但是,您需要仔細定義函數替換宏,以便僅對其參數進行一次評估。 例如,如果您有這樣的宏

#define DOUBLE(i) ((i) + (i))

並且您這樣稱呼它DOUBLE(i++) ,它將被擴展為(i++)+(i++) ,這將導致C中的未定義行為。這就是為什么內聯函數只對它的參數進行一次評估的原因,勝於宏。

暫無
暫無

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

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