成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

帶參數的宏定義的一般格式 帶參數宏定義和函數的區(qū)別?

帶參數宏定義和函數的區(qū)別?1. 當編譯器編譯源代碼時,宏將被簡單地替換,沒有任何邏輯檢測,即簡單的代碼復制。2. 定義宏時不考慮參數類型。3. 參數宏的使用將使具有相同功能的代碼塊在目標文件中有多個副

帶參數宏定義和函數的區(qū)別?

1. 當編譯器編譯源代碼時,宏將被簡單地替換,沒有任何邏輯檢測,即簡單的代碼復制。

2. 定義宏時不考慮參數類型。

3. 參數宏的使用將使具有相同功能的代碼塊在目標文件中有多個副本,這將增加目標文件的大小。

4. 參數宏的運行速度比函數快,因為不需要參數棧的壓出操作。

5. 在定義參數宏時,應該更加小心,并添加更多的方括號。

6. 該函數只存在于目標文件中的一個位置,這樣可以節(jié)省程序空間。

7. 函數的調用會涉及參數的傳遞,壓棧/出棧操作比較慢。

8. 函數的參數有傳遞值和地址(指針)的問題,但參數宏不存在。

宏定義用法?

說到宏定義,我們首先應該了解什么是預處理指令。我相信你對它并不陌生。在編寫程序之前,程序開頭的include指令和define指令都是預處理指令,這使得我們的編譯更加高效和方便。因此,用戶可以在C語言中添加一些特定的預處理指令。

C語言提供的預處理功能有:宏定義、文件包含、條件編譯。今天,我將帶大家學習宏定義。宏定義有兩種,一種是“無參數宏定義”,另一種是“有參數宏定義”。

1、無參數宏定義

無參數宏定義相對簡單,它使用指定的標識符來表示字符串。它的一般形式是;

#define identifier string

它的功能是用這個程序文件中指定的標識符E替換2.71828459。在預處理中,指令后的所有e都被2.7182818459替換。此方法允許用戶用簡單名稱替換長字符串,因此此標識符(名稱)稱為“宏名稱”

在預處理期間用字符串替換宏名稱的過程稱為“宏擴展”。#Define是宏定義指令。

2、帶參數宏定義

帶參數宏定義不僅是一個簡單的字符串替換,也是一個參數替換。其定義的一般形式是;

#define identifier(macro name)(parameter table)string

該字符串包含括號中指定的參數。

宏定義只占用編譯時間,而函數調用占用運行時間(分配單元、保存字段、值傳輸、返回)。每次執(zhí)行都必須加載,因此執(zhí)行速度比宏定義慢。

當宏定義被多次使用時,源程序在宏定義展開后會很長時間,因為每次展開都會使程序增長,但執(zhí)行速度更快(這不是絕對的)。當宏定義擴展較多時,目標文件很大,執(zhí)行過程中系統頻繁換頁,效率較低)。函數調用不會使源程序變長。