1. 程式人生 > >iOS行內函數小記

iOS行內函數小記

前言:

對比兩者的mian.m的彙編程式碼,可以發現,沒有使用`static inline修飾的行內函數的mian函式彙編程式碼中,會出現 call 指令!這就是區別!呼叫call指令就是就需要:

-(1)將下一條指令的所在地址(即當時程式計數器PC的內容)入棧
-(2)並將子程式的起始地址送入PC(於是CPU的下一條指令就會轉去執行子程式)

結論:

1.使用inline修飾的函式,在編譯的時候,會把程式碼直接嵌入呼叫程式碼中。就相當於用#define 巨集定義來定義一個add 函式那樣!與#define的區別是:

1)#define定義的格式要有要求,而使用inline則就行平常寫函式那樣,只要加上`inline即可!
2)使用#define巨集定義的程式碼,編譯器不會對其進行引數有效性檢查,僅僅只是對符號表進行替換。
3)#define巨集定義的程式碼,其返回值不能被強制轉換成可轉換的適合的轉換型別。可參考百度文科 關於inline

2.在inline加上`static修飾符,只是為了表明該函式只在該檔案中可見!也就是說,在同一個工程中,就算在其他檔案中也出現同名、同參數的函式也不會引起函式重複定義的錯誤!**