é¦å
ï¼ä½ä¸ºexternæ¯C/C++è¯è¨ä¸è¡¨æå½æ°åå
¨å±åéä½ç¨èå´ï¼å¯è§æ§ï¼çå
³é®åï¼
该å
³é®ååè¯ç¼è¯å¨ï¼å
¶å£°æçå½æ°ååéå¯ä»¥å¨æ¬æ¨¡åæå
¶å®æ¨¡åä¸ä½¿ç¨ã
é常ï¼å¨æ¨¡åç头æ件ä¸å¯¹æ¬æ¨¡åæä¾ç»å
¶å®æ¨¡åå¼ç¨çå½æ°åå
¨å±åé以å
³é®åextern声æã
ä¾å¦ï¼å¦æ模åB欲å¼ç¨è¯¥æ¨¡åAä¸å®ä¹çå
¨å±åéåå½æ°æ¶åªéå
å«æ¨¡åAç头æ件å³å¯ã
è¿æ ·ï¼æ¨¡åBä¸è°ç¨æ¨¡åAä¸çå½æ°æ¶ï¼å¨ç¼è¯é¶æ®µï¼æ¨¡åBè½ç¶æ¾ä¸å°è¯¥å½æ°ï¼ä½æ¯å¹¶ä¸ä¼æ¥éï¼
å®ä¼å¨è¿æ¥é¶æ®µä¸ä»æ¨¡åAç¼è¯çæçç®æ 代ç ä¸æ¾å°æ¤å½æ°
extern "C"æ¯è¿æ¥ç³æ(linkage declaration),
被extern "C"修饰çåéåå½æ°æ¯æç
§Cè¯è¨æ¹å¼ç¼è¯åè¿æ¥ç,
æ¥ççC++ä¸å¯¹ç±»ä¼¼Cçå½æ°æ¯ææ ·ç¼è¯çï¼
ä½ä¸ºä¸ç§é¢å对象çè¯è¨ï¼C++æ¯æå½æ°éè½½ï¼èè¿ç¨å¼è¯è¨Cåä¸æ¯æã
å½æ°è¢«C++ç¼è¯åå¨ç¬¦å·åºä¸çååä¸cè¯è¨çä¸åã
ä¾å¦ï¼å设æ个å½æ°çåå为ï¼
void foo( int x, int y );
ãã
该å½æ°è¢«Cç¼è¯å¨ç¼è¯åå¨ç¬¦å·åºä¸çåå为_fooï¼
èC++ç¼è¯å¨åä¼äº§çå_foo_int_intä¹ç±»çåå
ï¼ä¸åçç¼è¯å¨å¯è½çæçååä¸åï¼
ä½æ¯é½éç¨äºç¸åçæºå¶ï¼çæçæ°åå称为âmangled nameâï¼ã
_foo_int_intè¿æ ·çååå
å«äºå½æ°åãå½æ°åæ°æ°éåç±»åä¿¡æ¯ï¼
C++å°±æ¯é è¿ç§æºå¶æ¥å®ç°å½æ°éè½½çã
ä¾å¦ï¼å¨C++ä¸ï¼å½æ°void foo( int x, int y )ä¸void foo( int x,float y )
ç¼è¯çæç符å·æ¯ä¸ç¸åçï¼åè
为_foo_int_floatã
åæ ·å°ï¼C++ä¸çåéé¤æ¯æå±é¨åéå¤ï¼è¿æ¯æç±»æååéåå
¨å±åéã
ç¨æ·æç¼åç¨åºçç±»æååéå¯è½ä¸å
¨å±åéååï¼æ们以"."æ¥åºåã
èæ¬è´¨ä¸ï¼ç¼è¯å¨å¨è¿è¡ç¼è¯æ¶ï¼ä¸å½æ°çå¤çç¸ä¼¼ï¼
ä¹ä¸ºç±»ä¸çåéåäºä¸ä¸ªç¬ä¸æ äºçååï¼
è¿ä¸ªååä¸ç¨æ·ç¨åºä¸ååçå
¨å±åéååä¸åã
æ¬å
容ï¼å¼ç¨èªï¼éé¢ææ´è¯¦ç»ç说æï¼
http://blog.csdn.net/ygm_linux/article/details/26626893