c語言帶參數的宏
Ⅰ 急(c語言)比較帶參的宏與帶參的函數之間的區別
區別:
1、宏會在編譯器在對源代碼進行編譯的時候進行簡單替換,不會進行任何邏輯檢測,即簡單代碼復制而已。
2、宏進行定義時不會考慮參數的類型。
3、參數宏的使用會使具有同一作用的代碼塊在目標文件中存在多個副本,即會增長目標文件的大小。
4、參數宏的運行速度會比函數快,因為不需要參數壓棧/出棧操作。
5、參數宏在定義時要多加小心,多加括弧。
6、函數只在目標文件中存在一處,比較節省程序空間。
7、函數的調用會牽扯到參數的傳遞,壓棧/出棧操作,速度相對較慢。
8、函數的參數存在傳值和傳地址(指針)的問題,參數宏不存在。
Ⅱ C語言中的宏定義怎麼用
C語言中的宏定義用法分為兩種。
1、不帶參數的宏定義比較簡單,就是用一個指定的標識符來代表一個字元串。它的一般形式為「#define 標識符 字元串」,例如#define E 2.718281828459。這種方法使用戶能以一個簡單的名字代替一個長的字元串。
2、帶參數的宏定義不是僅僅進行簡單的字元串替換,還要進行參數替換。其定義的一般形式為;「#define 標識符(宏名)(參數表) 字元串」,字元串中包含在括弧中所指定的參數。例如#define S(a,b) a*b area=S(3. 2)。
(2)c語言帶參數的宏擴展閱讀:
宏定義只佔編譯時間,函數調用則佔用運行時間(分配單元,保存現場,值傳遞,返回),每次執行都要載入,所以執行相對宏定義會較慢。
使用宏定義次數多時,宏定義展開後源程序很長,因為每展開一次都使程序增長,但是執行起來比較快一點(這也不是絕對的,當有很多宏定義展開,目標文件很大,執行的時候運行時系統換頁頻繁,效率就會低下)。而函數調用不使源程序變長。
Ⅲ C語言函數問題。帶參數的宏ab這里是實參,下面mn也是實參,所以這里是下面的實參傳給上面的實參嗎
普通函數的聲明,定義里用的叫形參,普通函數調用時,調用語句里的參數叫實參。
宏與它們不一樣,宏在預編譯期間,做的工作 是 替代 (字元替代,名字替代)。
#defind area(a,b) (PI * a * b) 裡面的 PI 要被 前面PI 的 宏定義 替代成:
#defind area(a,b) ((asin(1) * 2) * a * b)
然後程序里的 s = area(m,n); 要用 area(a,b) 的 宏 替代,同時要把 實際參數 m,n代入,變成:
s = ((asin(1) * 2) * m * n);
上述工作完成後,編譯器,再把 這個替代工作完成後的 源程序, 編譯和鏈接成 可執行程序 .exe 文件。