網(wǎng)站首頁 編程語言 正文
一、C語言中函數(shù)的“缺陷”
實參和形參之間僅僅是值傳遞,因此,函數(shù)中無法直接改變實參。
二、再次理解函數(shù)
函數(shù)是一種代碼復(fù)用的手段
- 把實現(xiàn)某個功能的代碼片段進(jìn)行封裝(當(dāng)作一個整體)
- 給這個代碼片段一個合適的名字(通過名字使用代碼)
- 定義參數(shù)(定義代碼片段需要處理的問題)
三、C語言中的宏
- 宏是C語言中代碼復(fù)用的補(bǔ)充方式
- 宏定義語法:#define MACRO(param) code_segment
- 宏使用語法:MACRO(num);
例如:
#define ADD(a,b) a + b
int main()
{
int z = ADD(1,2);
printf("z = %d\n", z);
return 0;
}
四、宏與函數(shù)的不同
- 宏不是函數(shù),使用宏沒有函數(shù)調(diào)用的過程
- 函數(shù)調(diào)用先傳遞參數(shù)值,然后跳轉(zhuǎn)執(zhí)行函數(shù)體,最后返回
- 使用宏只是單純“代碼復(fù)制粘貼”,然后替換參數(shù)
- 同一個函數(shù),無論調(diào)用多少次,都執(zhí)行相同的函數(shù)體代碼
- 同一個宏,每次使用都會“復(fù)制粘貼”相同代碼
五、編譯器組成簡介
- 預(yù)處理模塊:處理所有宏以及#開頭的語句(復(fù)制粘貼替換)
- 編譯模塊:將C程序翻譯成二進(jìn)制程序
- 鏈接模塊:將二進(jìn)制程序組合成可執(zhí)行程序
六、宏使用示例
用一個簡單的交換兩個數(shù)的值作為例子:
#include <stdio.h>
#define SWAP(a, b) {int t = a; a = b; b = t;}
int main()
{
int x = 1;
int y = 2;
SWAP(x, y); // {int t = x; x = y; y = t;}
printf("x = %d, y = %d\n", x, y);
return 0;
}
下面為輸出結(jié)果:
七、再論宏常量
#define NAME value
- 預(yù)處理模塊將代碼中出現(xiàn)的NAME標(biāo)識符替換為value
- 因此,宏常量在本質(zhì)上與字面量相同(真正意義的常量)
八、小結(jié)
- 宏是C語言中代碼復(fù)用的補(bǔ)充方式
- 宏不是函數(shù),使用宏沒有函數(shù)調(diào)用的過程
- 預(yù)處理模塊對宏的處理方式:復(fù)制粘貼替換
- 程序中使用宏的地方最終被處理為對應(yīng)的代碼片段
- 宏常量的本質(zhì)就是字面量
原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/122501375
相關(guān)推薦
- 2024-03-08 SpringBoot項目多模塊開發(fā)詳解
- 2022-03-04 uniapp上傳圖片視頻uniapp上傳圖片視頻
- 2023-08-13 ps打開之后切圖一段時間C盤存儲量變小怎么清理?
- 2022-08-14 C++學(xué)習(xí)之算術(shù)運(yùn)算符使用詳解_C 語言
- 2022-06-23 教你編寫bat腳本W(wǎng)indows批處理_DOS/BAT
- 2023-09-12 Nginx安裝與常見命令
- 2022-09-03 C++中std::conditional的使用說明_C 語言
- 2022-08-02 Go語言resty?http包調(diào)用jenkins?api實例_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支