A. C語言中宏替換占不佔用運行時間
宏替換,發生在預編譯的時候,預編譯後才能編譯運行,在運行的時候,宏替換已經完成,故不會佔用運行時間
B. 宏和函數的區別以及C語言的編譯鏈接過程
宏在編譯之前,需要進行預處理,將宏直接提換成宏定義的代碼,是直接替換,也就是說,在預處理之後,你再看代碼,發現宏定義已經被替換過來了,你看到是你定義之後的那一串代碼。
而函數,在編譯之後,有一系列調用函數的過程,比如,傳參,壓棧等,這部分是編譯器所做的。
C 語言編譯鏈接過程:
test.c(原始代碼) --> 預處理 --> test.i(經過預處理的)--> 編譯 --> test.s(匯編代碼)--> 匯編 --> test.o(目標文件,其實這部分已經是單個文件的完整二進制文件了,只是還不能執行,如果不懂這句話,可以再問我,其實這部分知識,平時也很少遇到) --> 鏈接 --> test (可執行文件,比如一個程序由3個代碼文件共同生成,那麼就會有3個.o格式目標文件,鏈接是把多個目標文件真正的聯系在一起,比如a.o 中使用了 b.o中的一個函數,那麼它們兩個之間的地址是如何確定的(同理,可引申到使用函數庫的問題,使用printf函數,也是需要鏈接器進行確定printf函數地址,才能知道如何調用。)這個就是鏈接器的作用)
C. 急(C語言)比較帶參的宏與帶參的函數之間的區別
區別:
1、宏會在編譯器在對源代碼進行編譯的時候進行簡單替換,不會進行任何邏輯檢測,即簡單正世代碼復制而已。
2、宏進行定義時不會考慮參數的舉伍肢類型。
3、參數宏的使用會使具有同一作用的代碼塊在目標文件中存在多個副本,即會增長目標文件的大小。
4、參數宏的運行速度會比函數快,因為不需要參數壓棧/出棧操作。
5、參數宏在定義時要多加小心,多加括弧。
6、函數只在目標文件中存在一處,比較節省程序空間。
7、函數的調用會牽扯到參數的傳遞,壓棧/出棧操作,速度相對較慢。
8、函數的參數存在橘賣傳值和傳地址(指針)的問題,參數宏不存在。
D. 請問C語言中帶參數的宏和函數的比較
宏是用於編譯器處理的,他在程序編譯時,會在對應位置展開成代碼。。,這就相當於你在告訴編譯器,我想在這個位置加一些代碼,代碼的內容已在宏中定義,請編譯器自己支找。。。,也就是說程序在運行時,升李早已變成了正並對應位置上的代碼,此時已沒有宏的概念了。。。。
而函數則是運行時,調用。他不會在編譯時,在對應位置上加上函數代舉笑跡碼,只是加上一個函數入口指針。。。從這個入口去運行一段代碼。。。運行完了之後回到當前位置繼續執行。。。。
可以簡單的認為,宏是在編譯時上起作用,而函數是運行時起作用。。。