91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

宏和函數的區別

發布時間:2020-06-18 07:56:09 來源:網絡 閱讀:2357 作者:我是你帆哥 欄目:編程語言

宏與函數的區別:

1、宏做的是簡單的字符串替換,不受類型限制;而函數是參數的傳遞,受到參數類型的限制。


2、宏體替換宏名是在編譯之前就完成的,函數參數的調用是在函數執行時將實參傳給形參的。


3、宏參數的替換是不經過計算的,有可能會帶有副作用,所以我們在寫宏體的時候一般在能加括號的地方都不要吝嗇括號,但有時候這也不能解決副作用的問題。函數在傳參時傳的是值,不會產生副作用。

#define MAX (a,b)  ((a)>(b)?(a):(b))
int main()
{
                 int a = 10;
                 int b = 20;
                 int ret = MAX (a++, b++);
                 printf( "%d  %d  %d\n" , a, b, ret);
                 system( "pause");
                 return 0;
}


結果是: 11  22  21 

這就是由宏所帶的副作用造成的,因為宏進行的是字符串的替換,替換后的式子是:((a++)>(b++)?(a++):(b++))。如果是函數,則傳遞的是值,就不會產生副作用。


4、因為函數是在執行期間調用的,所以可以進行調試;宏在編譯前完成的,所以不可以進行調試。


5、函數支持遞歸,宏不支持。


6、函數在調用時會產生時間和空間上的開銷;宏在調用時則沒有,因為宏進行的只是簡單的字符串替換。


7、如果使用宏比較多,宏體在展開時會產生大量的代碼,大大降低運行時間。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建平县| 方城县| 涪陵区| 米泉市| 平陆县| 冀州市| 甘泉县| 额济纳旗| 察雅县| 响水县| 江孜县| 枣阳市| 维西| 合肥市| 巫山县| 和政县| 横峰县| 柳江县| 班戈县| 乳源| 碌曲县| 铁力市| 龙泉市| 义马市| 东莞市| 社旗县| 绥滨县| 酉阳| 紫金县| 都昌县| 乌海市| 宽甸| 来凤县| 吉木萨尔县| 仙桃市| 云和县| 丘北县| 沙田区| 嵊州市| 大埔县| 乌恰县|