亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

宏和函數的區別

發布時間: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

洞头县| 郎溪县| 朝阳市| 宁乡县| 日照市| 崇明县| 海口市| 黑山县| 隆安县| 唐海县| 江口县| 晋中市| 临桂县| 福贡县| 隆尧县| 杨浦区| 瑞金市| 兴安县| 始兴县| 达州市| 双流县| 资阳市| 天门市| 花垣县| 涡阳县| 孙吴县| 垣曲县| 托里县| 桑日县| 息烽县| 海安县| 肃宁县| 宣威市| 上虞市| 青海省| 蒙阴县| 霍城县| 合山市| 林西县| 临颍县| 石渠县|