宏是用于編譯器處理的,他在程序編譯時,會在對應位置展開成代碼。。,這就相當于你在告訴編譯器,我想在這個位置加一些代碼,代碼的內容已在宏中定義,請編譯器自己支找。。。,也就是說程序在運行時,早已變成了對應位置上的代碼,此時已沒有宏的概念了。。。。
創新互聯專業為企業提供宿城網站建設、宿城做網站、宿城網站設計、宿城網站制作等企業網站建設、網頁設計與制作、宿城企業網站模板建站服務,10余年宿城做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
而函數則是運行時,調用。他不會在編譯時,在對應位置上加上函數代碼,只是加上一個函數入口指針。。。從這個入口去運行一段代碼。。。運行完了之后回到當前位置繼續執行。。。。
可以簡單的認為,宏是在編譯時上起作用,而函數是運行時起作用。。。
(1)沒有類型限制,宏替換只是單純代碼文本的替換,不會檢測類型。
(2)所謂“宏調用”實際上是在編譯階段將代碼替換,在編譯完成之后,程序執行時,不存在宏調用的步驟,函數調用是在程序執行時實際調用的,兩者沒有可比性。
不同。
雖然功能近似,但函數會產生獨立代碼,每次調用執行的是同一個位置的代碼,無論調用多少次。
宏定義是簡單的文本替換,產生的代碼是替換后程序產生的代碼,簡單說就是程序里每次使用宏替換后的地方都要產生類似的代碼,而這些替換后產生的代碼存在于程序的不同位置。
宏定義不檢查參數類型,僅僅是簡單的文本替換
區別:
1、宏會在編譯器在對源代碼進行編譯的時候進行簡單替換,不會進行任何邏輯檢測,即簡單代碼復制而已。
2、宏進行定義時不會考慮參數的類型。
3、參數宏的使用會使具有同一作用的代碼塊在目標文件中存在多個副本,即會增長目標文件的大小。
4、參數宏的運行速度會比函數快,因為不需要參數壓棧/出棧操作。
5、參數宏在定義時要多加小心,多加括號。
6、函數只在目標文件中存在一處,比較節省程序空間。
7、函數的調用會牽扯到參數的傳遞,壓棧/出棧操作,速度相對較慢。
8、函數的參數存在傳值和傳地址(指針)的問題,參數宏不存在。
本文標題:c語言中宏調用比函數調用 c語言宏函數怎么用
網站網址:http://vcdvsql.cn/article4/dopgeoe.html
成都網站建設公司_創新互聯,為您提供搜索引擎優化、、標簽優化、域名注冊、網站收錄、企業網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯