NDK02_C:宏、宏函數和內聯函數

NDK開發彙總

一 宏

預處理器是一個文本替換工具

宏就是文本替換

//宏一般使用大寫區分
//宏變量
//在代碼中使用 A 就會被替換爲1
#define A 1
//宏函數
#defind test(i) i > 10 ? 1: 0

//其他技巧
// # 連接符 連接兩個符號組成新符號
#define DN_INT(arg) int dn_ ## arg
DN_INT(i) = 10;
dn_i = 100;

// \ 換行符
#define PRINT_I(arg) if(arg) { \
 printf("%d\n",arg); \
 }
PRINT_I(dn_i);

//可變宏
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,"NDK", __VA_ARGS__);

//陷阱
#define MULTI(x,y)  x*y
//獲得 4
printf("%d\n", MULTI(2, 2));
//獲得 1+1*2  = 3
printf("%d\n", MULTI(1+1, 2));

二 宏函數

​ 優點:

​ 文本替換,每個使用到的地方都會替換爲宏定義。

​ 不會造成函數調用的開銷(開闢棧空間,記錄返回地址,將形參壓棧,從函數返回還要釋放堆

​ 棧。)

​ 缺點:

​ 生成的目標文件大,不會執行代碼檢查

三 內聯函數

​ 和宏函數工作模式相似,但是兩個不同的概念,首先是函數,那麼就會有類型檢查同時也可以debug
在編譯時候將內聯函數插入。

不能包含複雜的控制語句,while、switch,並且內聯函數本身不能直接調用自身。
如果內聯函數的函數體過大,編譯器會自動的把這個內聯函數變成普通函數。

拓展:手寫sprintf

根據可變參數、指針運算等知識自己實現 sprintf 函數(只實現 %d 就行)!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章