C語言 從C 中鏈結時的C符號的處理

2021-06-23 02:27:44 字數 860 閱讀 2345

from wiki: 

最常見的c++慣常的做法:

#ifdef __cplusplus 

extern

"c"#endif

這種寫法用於確保下符號是未被c++編譯器名字修飾過的——這種**能使得c++編譯器編譯出的二進位制目標**中的鏈結符號是未經過c++名字修飾過的,就像c編譯器一樣。就像c語言定義是未名字修飾過的一樣,c++編譯器需要防止名字修飾這些識別符號。

例如,c標準字串庫通常包含了類似這樣子的

#ifdef __cplusplus

extern

"c"#endif

於是,例如這樣的**

if

(strcmp

(argv[

1], "-x")==

0)strcpy

(a, argv[2]

);else

memset

(a, 0, sizeof

(a))

;

就能使用正確的、未經名字修飾過的strcmp和memset。如果沒有使用extern "c",那麼sunpro c++編譯器會產生等價於下面的c**:

if

(__1cgstrcmp6fpkc1_i_(argv[1]

,"-x")==

0) __1cgstrcpy6fpcpkc_0_(a, argv[2]

);else

__1cgmemset6fpvii_0_ (a,0,

sizeof

(a))

;

而這些鏈結符號並不存在於c執行庫中(例如

libc)。因此將導致鏈結錯誤。

C 中的 符號

c 中的 符號2005 7 27 allen lee 符號是特殊而又實用的 c 符號。比如它在 string 中的應用。1字元 表示,其後的字串是個 逐字字串 verbatim string 這個說法來自 c primer 中文版 stanley b.lippman,侯捷 陳碩合譯 2對於逐字字串字...

c 中的 符號

看c 那麼久,今天看原始碼 void concatlayer forward gpu const vector bottom,const vector top 竟然懵了,前後誰屬於誰?查下,三種用法 1 表示 域操作符 例 宣告了乙個類a,類a裡宣告了乙個成員函式void f 但沒有在類的宣告裡給出...

C 中的 符號

doctype html public wcdtd xhtml stricten httpwwwworgtrxhtmldtdxhtml strictdtd 符號是特殊而又實用的c 符號。比如它在string中的應用。字元 表示,其後的字串是個 逐字字串 verbatim string 這個說法來自c...