最近在學習階段,翻閱代碼。發現有一個用法比較讓我奇怪,就上網查了一下
1
|
static
inline
void
somefunction(
void
);
|
這里是舉例說明,這行代碼是放在.h文件中的。
在此之前,如果對inline概念不了解的請自行wiki
http://zh.wikipedia.org/wiki/%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0
但是因為自己用得比較少,所以沒有太關注,
當然也沒有inline修飾符前面要加static的概念
仔細想想:
1、首先,inline函數是不能像傳統的函數那樣放在.c中然后在.h中給出接口在其余文件中調用的,
因為inline函數其實是跟宏定義類似,不存在所謂的函數入口。
2、因為第一點,會出現一個問題,就是說如果inline函數在兩個不同的文件中出現,也就是說
一個.h被兩個不同的文件包含,則會出現重名,鏈接失敗
所以static inline 的用法就能很好的解決這個問題,
使用static修飾符,函數僅在文件內部可見,不會污染命名空間。
可以理解為一個inline在不同的.C里面生成了不同的實例,而且名字是完全相同的
PS: inline修飾符不同的編譯器不一樣,下次有空再補充
IAR中需要手動開發 並直接可以使用,keil中直接__inline即可 只要不是O0就會有內聯處理@20140417