答:首先,extern是c/c++語言中表明函式和全域性變數作用範圍的關鍵字,該關鍵字告訴編譯器,其宣告的函式和變數可以在本模組或其它模組中使用。
通常,在模組的標頭檔案中對本模組提供給其它模組引用的函式和全域性變數以關鍵字extern宣告。extern "c"是連線申明(linkage
declaration),被extern
"c"修飾的變數和函式是按照c語言方式編譯和連線的。作為一種物件導向的語言,c++支援函式過載,而過程式語言c則不支援。函式被c++編譯後在符號庫中的名字與c語言的不同。例如,假設某個函式的原型為:void
foo( int x, int y
);該函式被c編譯器編譯後在符號庫中的名字為_foo,而c++編譯器則會產生像_foo_int_int之類的名字。這樣的名字包含了函式名、函式引數數量及型別資訊,c++就是靠這種機制來實現函式過載的。
所以,可以用一句話概括extern 「c」這個宣告的真實目的:解決名字匹配問題,實現c++與c的混合程式設計。
答:前者是從標準庫路徑尋找和引用file.h,而後者是從當前工作路徑搜尋並引用file.h。
C語言常見問題總結
1.用 注釋 在c語言中不是好辦法,尤其是在注釋的 中原先已經有注釋存在,可能會報錯,更好的辦法是用 if 和 endif 2.如果有一些宣告需要用於幾個不同的原始檔,可以在乙個單獨的檔案編寫這些宣告,然後用 include命令把這個檔案包含到需要使用這些宣告的原始檔中 3.標準的c編譯器不會對陣列...
C程式設計常見問題總結
本文是c程式設計中一些常見錯誤的總結,有些是顯而易見的,有些則是不容易發現 a b 出現bug c d c d將不會執行 if a b c a恆等於b,只有當b 0的時候才執行 再看下面的 if 0 a 5 c 布林表示式恒為真 上面 中的bool表示式恒為真,由於0 a的值為0或1,永遠都小於5成...
C程式設計常見問題總結
本文是c程式設計中一些常見錯誤的總結,有些是顯而易見的,有些則是不容易發現 a b 出現bug c d c d將不會執行 if a b c a恆等於b,只有當b 0的時候才執行 再看下面的 if 0 a 5 c 布林表示式恒為真 上面 中的bool表示式恒為真,由於0 a的值為0或1,永遠都小於5成...