1 extern "c"
extern "c" 包含雙重含義,從字面上即可得到:首先,被它修飾的目標是「extern」的;其次,被它修飾的目標是「c」的。讓我們來詳細解讀這兩重含義。 (1) 被extern "c"限定的函式或變數是extern型別的 extern是c/c++語言中表明函式和全域性變數作用範圍(可見性)的關鍵字,該關鍵字告訴編譯器,其宣告的函式和變數可以在本模組或其它模組中使用。記住,下列語句: extern int a; 僅僅是乙個變數的宣告,其並不是在定義變數a,並未為a分配記憶體空間。變數a在所有模組中作為一種全域性變數只能被定義一次,否則會出現連線錯誤。 通常,在模組的標頭檔案中對本模組提供給其它模組引用的函式和全域性變數以關鍵字extern宣告。例如,如果模組b欲引用該模組a中定義的全域性變數和函式時只需包含模組a的標頭檔案即可。這樣,模組b中呼叫模組a中的函式時,在編譯階段,模組b雖然找不到該函式,但是並不會報錯;它會在連線階段中從模組a編譯生成的目標**中找到此函式。 與extern對應的關鍵字是static,被它修飾的全域性變數和函式只能在本模組中使用。因此,乙個函式或變數只可能被本模組使用時,其不可能被extern 「c」修飾。
(2) 被extern "c"修飾的變數和函式是按照c語言方式編譯和連線的,命名方式採取和c語言一樣的。
2 函式指標
(1) 帶typedef,定義乙個函式指標的型別。如下listsearchfunction是乙個型別
typedef int (*listsearchfunction) (void *member, sizetype offset, uintptr search_key);
可以用listsearchfunction 定義乙個函式指標,如 listsearchfunction search_func
(2) 不帶typedef, 即直接定義這樣形式的乙個函式指標變數,如下,listsearchfunction是乙個變數
int (*listsearchfunction) (void *member, sizetype offset, uintptr search_key);
3 格式化字串 sprintf函式
char command[128];// 128 is plenty for "set context=system"
sprintf (command, "set context=%s", defaultcontext.c_str ());
extern陣列與extern指標
陣列名代表了存放該陣列的那塊記憶體,它是這塊記憶體的首位址。這就說明了陣列名是乙個位址,而且,還是乙個不可修改的常量,完整地說,就是乙個位址常量。陣列名跟列舉常量一樣,都屬於符號常量。陣列名這個符號,就代表了那塊記憶體的首位址。注意了!不是陣列名這個符號的值是那塊記憶體的首位址,而是陣列名這個符號本...
extern陣列與extern指標
陣列名代表了存放該陣列的那塊記憶體,它是這塊記憶體的首位址。這就說明了陣列名是乙個位址,而且,還是乙個不可修改的常量,完整地說,就是乙個位址常量。陣列名跟列舉常量一樣,都屬於符號常量。陣列名這個符號,就代表了那塊記憶體的首位址。注意了!不是陣列名這個符號的值是那塊記憶體的首位址,而是陣列名這個符號本...
extern陣列與extern指標
extern陣列與extern指標 陣列名代表了存放該陣列的那塊記憶體,它是這塊記憶體的首位址。這就說明了陣列名是乙個位址,而且,還是乙個不可修改的常量,完整地說,就是乙個位址常量。陣列名跟列舉常量一樣,都屬於符號常量。陣列名這個符號,就代表了那塊記憶體的首位址。注意了!不是陣列名這個符號的值是那塊...