C++ÖÐextern ¡°C¡±º¬ÒåÉî²ã̽Ë÷

1.ÒýÑÔ

¡¡¡¡C++ÓïÑԵĴ´½¨³õÖÔÊÇ¡°a?better?C¡±£¬µ«ÊÇÕâ²¢²»Òâζ×ÅC++ÖÐÀàËÆCÓïÑÔµÄÈ«¾Ö±äÁ¿ºÍº¯ÊýËù²ÉÓõıàÒëºÍÁ¬½Ó·½Ê½ÓëCÓïÑÔÍêÈ«Ïàͬ¡£×÷ΪһÖÖÓûÓëC¼æÈݵÄÓïÑÔ£¬C++±£ÁôÁËÒ»²¿·Ö¹ý³ÌʽÓïÑÔµÄÌص㣨±»ÊÀÈ˳ÆΪ¡°²»³¹µ×µØÃæÏò¶ÔÏó¡±£©£¬Òò¶øËü¿ÉÒÔ¶¨Òå²»ÊôÓÚÈκÎÀàµÄÈ«¾Ö±äÁ¿ºÍº¯Êý¡£µ«ÊÇ£¬C++±Ï¾¹ÊÇÒ»ÖÖÃæÏò¶ÔÏóµÄ³ÌÐòÉè¼ÆÓïÑÔ£¬ÎªÁËÖ§³Öº¯ÊýµÄÖØÔØ£¬C++¶ÔÈ«¾Öº¯ÊýµÄ´¦Àí·½Ê½ÓëCÓÐÃ÷ÏԵIJ»Í¬¡£

¡¡¡¡2.´Ó±ê׼ͷÎļþ˵Æð

¡¡¡¡Ä³ÆóÒµÔø¾­¸ø³öÈçϵÄÒ»µÀÃæÊÔÌ⣺

¡¡¡¡ÃæÊÔÌâ
¡¡¡¡ÎªÊ²Ã´±ê׼ͷÎļþ¶¼ÓÐÀàËÆÒÔϵĽṹ£¿?


#ifndef?__INCvxWorksh
#define?__INCvxWorksh?
#ifdef?__cplusplus
extern?"C"?{
#endif?
/*...*/?
#ifdef?__cplusplus
}
#endif?
#endif?/*?__INCvxWorksh?*/

¡¡¡¡·ÖÎö
¡¡¡¡ÏÔÈ»£¬Í·ÎļþÖеıàÒëºê¡°#ifndef?__INCvxWorksh¡¢#define?__INCvxWorksh¡¢#endif¡±?µÄ×÷ÓÃÊÇ·ÀÖ¹¸ÃÍ·Îļþ±»Öظ´ÒýÓá£

¡¡¡¡ÄÇô
#ifdef?__cplusplus
extern?"C"?{
#endif?
#ifdef?__cplusplus
}
#endif?

¡¡¡¡µÄ×÷ÓÃÓÖÊÇʲôÄØ£¿ÎÒÃǽ«ÔÚÏÂÎÄÒ»Ò»µÀÀ´¡£
¡¡¡¡3.Éî²ã½ÒÃÜextern?"C"

¡¡¡¡extern?"C"?°üº¬Ë«Öغ¬Ò壬´Ó×ÖÃæÉϼ´¿ÉµÃµ½£ºÊ×ÏÈ£¬±»ËüÐÞÊεÄÄ¿±êÊÇ¡°extern¡±µÄ£»Æä´Î£¬±»ËüÐÞÊεÄÄ¿±êÊÇ¡°C¡±µÄ¡£ÈÃÎÒÃÇÀ´Ïêϸ½â¶ÁÕâÁ½Öغ¬Òå¡£

¡¡¡¡±»extern?"C"ÏÞ¶¨µÄº¯Êý»ò±äÁ¿ÊÇexternÀàÐ͵ģ»

¡¡¡¡externÊÇC/C++ÓïÑÔÖбíÃ÷º¯ÊýºÍÈ«¾Ö±äÁ¿×÷Ó÷¶Î§£¨¿É¼ûÐÔ£©µÄ¹Ø¼ü×Ö£¬¸Ã¹Ø¼ü×Ö¸æËß±àÒëÆ÷£¬ÆäÉùÃ÷µÄº¯ÊýºÍ±äÁ¿¿ÉÒÔÔÚ±¾Ä£¿é»òÆäËüÄ£¿éÖÐʹÓ᣼Çס£¬ÏÂÁÐÓï¾ä£º
¡¡¡¡extern?int?a;

¡¡¡¡½ö½öÊÇÒ»¸ö±äÁ¿µÄÉùÃ÷£¬Æä²¢²»ÊÇÔÚ¶¨Òå±äÁ¿a£¬²¢Î´Îªa·ÖÅäÄÚ´æ¿Õ¼ä¡£±äÁ¿aÔÚËùÓÐÄ£¿éÖÐ×÷ΪһÖÖÈ«¾Ö±äÁ¿Ö»Äܱ»¶¨ÒåÒ»´Î£¬·ñÔò»á³öÏÖÁ¬½Ó´íÎó¡£

¡¡¡¡Í¨³££¬ÔÚÄ£¿éµÄÍ·ÎļþÖжԱ¾Ä£¿éÌṩ¸øÆäËüÄ£¿éÒýÓõĺ¯ÊýºÍÈ«¾Ö±äÁ¿ÒԹؼü×ÖexternÉùÃ÷¡£ÀýÈ磬Èç¹ûÄ£¿éBÓûÒýÓøÃÄ£¿éAÖж¨ÒåµÄÈ«¾Ö±äÁ¿ºÍº¯ÊýʱֻÐè°üº¬Ä£¿éAµÄÍ·Îļþ¼´¿É¡£ÕâÑù£¬Ä£¿éBÖе÷ÓÃÄ£¿éAÖеĺ¯Êýʱ£¬ÔÚ±àÒë½×¶Î£¬Ä£¿éBËäÈ»ÕÒ²»µ½¸Ãº¯Êý£¬µ«ÊDz¢²»»á±¨´í£»Ëü»áÔÚÁ¬½Ó½×¶ÎÖдÓÄ£¿éA±àÒëÉú³ÉµÄÄ¿±ê´úÂëÖÐÕÒµ½´Ëº¯Êý¡£

¡¡¡¡Óëextern¶ÔÓ¦µÄ¹Ø¼ü×ÖÊÇstatic£¬±»ËüÐÞÊεÄÈ«¾Ö±äÁ¿ºÍº¯ÊýÖ»ÄÜÔÚ±¾Ä£¿éÖÐʹÓá£Òò´Ë£¬Ò»¸öº¯Êý»ò±äÁ¿Ö»¿ÉÄܱ»±¾Ä£¿éʹÓÃʱ£¬Æä²»¿ÉÄܱ»extern?¡°C¡±ÐÞÊΡ£

¡¡¡¡±»extern?"C"ÐÞÊεıäÁ¿ºÍº¯ÊýÊÇ°´ÕÕCÓïÑÔ·½Ê½±àÒëºÍÁ¬½ÓµÄ£»

¡¡¡¡Î´¼Óextern?¡°C¡±ÉùÃ÷ʱµÄ±àÒ뷽ʽ

¡¡¡¡Ê×ÏÈ¿´¿´C++ÖжÔÀàËÆCµÄº¯ÊýÊÇÔõÑù±àÒëµÄ¡£

¡¡¡¡×÷ΪһÖÖÃæÏò¶ÔÏóµÄÓïÑÔ£¬C++Ö§³Öº¯ÊýÖØÔØ£¬¶ø¹ý³ÌʽÓïÑÔCÔò²»Ö§³Ö¡£º¯Êý±»C++±àÒëºóÔÚ·ûºÅ¿âÖеÄÃû×ÖÓëCÓïÑԵIJ»Í¬¡£ÀýÈ磬¼ÙÉèij¸öº¯ÊýµÄÔ­ÐÍΪ£º?
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?)±àÒëÉú³ÉµÄ·ûºÅÊDz»ÏàͬµÄ£¬ºóÕßΪ_foo_int_float¡£
¡¡¡¡Í¬ÑùµØ£¬C++ÖеıäÁ¿³ýÖ§³Ö¾Ö²¿±äÁ¿Í⣬»¹Ö§³ÖÀà³ÉÔ±±äÁ¿ºÍÈ«¾Ö±äÁ¿¡£Óû§Ëù±àд³ÌÐòµÄÀà³ÉÔ±±äÁ¿¿ÉÄÜÓëÈ«¾Ö±äÁ¿Í¬Ãû£¬ÎÒÃÇÒÔ"."À´Çø·Ö¡£¶ø±¾ÖÊÉÏ£¬±àÒëÆ÷ÔÚ½øÐбàÒëʱ£¬Ó뺯ÊýµÄ´¦ÀíÏàËÆ£¬Ò²ÎªÀàÖеıäÁ¿È¡ÁËÒ»¸ö¶ÀÒ»ÎÞ¶þµÄÃû×Ö£¬Õâ¸öÃû×ÖÓëÓû§³ÌÐòÖÐͬÃûµÄÈ«¾Ö±äÁ¿Ãû×Ö²»Í¬¡£

¡¡¡¡Î´¼Óextern?"C"ÉùÃ÷ʱµÄÁ¬½Ó·½Ê½

¡¡¡¡¼ÙÉèÔÚC++ÖУ¬Ä£¿éAµÄÍ·ÎļþÈçÏ£º
//?Ä£¿éAÍ·Îļþ¡¡moduleA.h
#ifndef?MODULE_A_H
#define?MODULE_A_H
int?foo(?int?x,?int?y?);
#endif

¡¡¡¡ÔÚÄ£¿éBÖÐÒýÓøú¯Êý£º
//?Ä£¿éBʵÏÖÎļþ¡¡moduleB.cpp
#include?"moduleA.h"
foo(2,3);

¡¡¡¡Êµ¼ÊÉÏ£¬ÔÚÁ¬½Ó½×¶Î£¬Á¬½ÓÆ÷»á´ÓÄ£¿éAÉú³ÉµÄÄ¿±êÎļþmoduleA.objÖÐÑ°ÕÒ_foo_int_intÕâÑùµÄ·ûºÅ£¡

¡¡¡¡¼Óextern?"C"ÉùÃ÷ºóµÄ±àÒëºÍÁ¬½Ó·½Ê½

¡¡¡¡¼Óextern?"C"ÉùÃ÷ºó£¬Ä£¿éAµÄÍ·Îļþ±äΪ£º
//?Ä£¿éAÍ·Îļþ¡¡moduleA.h
#ifndef?MODULE_A_H
#define?MODULE_A_H
extern?"C"?int?foo(?int?x,?int?y?);
#endif

¡¡¡¡ÔÚÄ£¿éBµÄʵÏÖÎļþÖÐÈÔÈ»µ÷ÓÃfoo(?2,3?)£¬Æä½á¹ûÊÇ£º

¡¡¡¡£¨1£©Ä£¿éA±àÒëÉú³ÉfooµÄÄ¿±ê´úÂëʱ£¬Ã»ÓжÔÆäÃû×Ö½øÐÐÌØÊâ´¦Àí£¬²ÉÓÃÁËCÓïÑԵķ½Ê½£»

¡¡¡¡£¨2£©Á¬½ÓÆ÷ÔÚΪģ¿éBµÄÄ¿±ê´úÂëÑ°ÕÒfoo(2,3)µ÷ÓÃʱ£¬Ñ°ÕÒµÄÊÇδ¾­Ð޸ĵķûºÅÃû_foo¡£

¡¡¡¡Èç¹ûÔÚÄ£¿éAÖк¯ÊýÉùÃ÷ÁËfooΪextern?"C"ÀàÐÍ£¬¶øÄ£¿éBÖаüº¬µÄÊÇextern?int?foo(?int?x,?int?y?)?£¬ÔòÄ£¿éBÕÒ²»µ½Ä£¿éAÖеĺ¯Êý£»·´Ö®ÒàÈ»¡£

¡¡¡¡ËùÒÔ£¬¿ÉÒÔÓÃÒ»¾ä»°¸ÅÀ¨extern?¡°C¡±Õâ¸öÉùÃ÷µÄÕæʵĿµÄ£¨ÈκÎÓïÑÔÖеÄÈκÎÓï·¨ÌØÐԵĵ®Éú¶¼²»ÊÇËæÒâ¶øΪµÄ£¬À´Ô´ÓÚÕæʵÊÀ½çµÄÐèÇóÇý¶¯¡£ÎÒÃÇÔÚ˼¿¼ÎÊÌâʱ£¬²»ÄÜֻͣÁôÔÚÕâ¸öÓïÑÔÊÇÔõô×öµÄ£¬»¹ÒªÎÊÒ»ÎÊËüΪʲôҪÕâô×ö£¬¶¯»úÊÇʲô£¬ÕâÑùÎÒÃÇ¿ÉÒÔ¸üÉîÈëµØÀí½âÐí¶àÎÊÌ⣩£º
¡¡¡¡ÊµÏÖC++ÓëC¼°ÆäËüÓïÑԵĻìºÏ±à³Ì¡£
¡¡¡¡Ã÷°×ÁËC++ÖÐextern?"C"µÄÉèÁ¢¶¯»ú£¬ÎÒÃÇÏÂÃæÀ´¾ßÌå·ÖÎöextern?"C"ͨ³£µÄʹÓü¼ÇÉ¡£
¡¡¡¡4.extern?"C"µÄ¹ßÓ÷¨

¡¡¡¡£¨1£©ÔÚC++ÖÐÒýÓÃCÓïÑÔÖеĺ¯ÊýºÍ±äÁ¿£¬ÔÚ°üº¬CÓïÑÔÍ·Îļþ£¨¼ÙÉèΪcExample.h£©Ê±£¬Ðè½øÐÐÏÂÁд¦Àí£º
extern?"C"
{
#include?"cExample.h"
}

¡¡¡¡¶øÔÚCÓïÑÔµÄÍ·ÎļþÖУ¬¶ÔÆäÍⲿº¯ÊýÖ»ÄÜÖ¸¶¨ÎªexternÀàÐÍ£¬CÓïÑÔÖв»Ö§³Öextern?"C"ÉùÃ÷£¬ÔÚ.cÎļþÖаüº¬ÁËextern?"C"ʱ»á³öÏÖ±àÒëÓï·¨´íÎó¡£

¡¡¡¡±ÊÕß±àдµÄC++ÒýÓÃCº¯ÊýÀý×Ó¹¤³ÌÖаüº¬µÄÈý¸öÎļþµÄÔ´´úÂëÈçÏ£º
/*?cÓïÑÔÍ·Îļþ£ºcExample.h?*/
#ifndef?C_EXAMPLE_H
#define?C_EXAMPLE_H
extern?int?add(int?x,int?y);
#endif
/*?cÓïÑÔʵÏÖÎļþ£ºcExample.c?*/
#include?"cExample.h"
int?add(?int?x,?int?y?)
{
return?x?+?y;
}
//?c++ʵÏÖÎļþ£¬µ÷ÓÃadd£ºcppFile.cpp
extern?"C"?
{
#include?"cExample.h"
}
int?main(int?argc,?char*?argv[])
{
add(2,3);?
return?0;
}

¡¡¡¡Èç¹ûC++µ÷ÓÃÒ»¸öCÓïÑÔ±àдµÄ.DLLʱ£¬µ±°üÀ¨.DLLµÄÍ·Îļþ»òÉùÃ÷½Ó¿Úº¯Êýʱ£¬Ó¦¼Óextern?"C"?{¡¡}¡£

¡¡¡¡£¨2£©ÔÚCÖÐÒýÓÃC++ÓïÑÔÖеĺ¯ÊýºÍ±äÁ¿Ê±£¬C++µÄÍ·ÎļþÐèÌí¼Óextern?"C"£¬µ«ÊÇÔÚCÓïÑÔÖв»ÄÜÖ±½ÓÒýÓÃÉùÃ÷ÁËextern?"C"µÄ¸ÃÍ·Îļþ£¬Ó¦¸Ã½ö½«CÎļþÖн«C++Öж¨ÒåµÄextern?"C"º¯ÊýÉùÃ÷ΪexternÀàÐÍ¡£
¡¡¡¡±ÊÕß±àдµÄCÒýÓÃC++º¯ÊýÀý×Ó¹¤³ÌÖаüº¬µÄÈý¸öÎļþµÄÔ´´úÂëÈçÏ£º
//C++Í·Îļþ?cppExample.h
#ifndef?CPP_EXAMPLE_H
#define?CPP_EXAMPLE_H
extern?"C"?int?add(?int?x,?int?y?);
#endif
//C++ʵÏÖÎļþ?cppExample.cpp
#include?"cppExample.h"
int?add(?int?x,?int?y?)
{
return?x?+?y;
}
/*?CʵÏÖÎļþ?cFile.c
/*?ÕâÑù»á±àÒë³ö´í£º#include?"cExample.h"?*/
extern?int?add(?int?x,?int?y?);
int?main(?int?argc,?char*?argv[]?)
{
add(?2,?3?);?
return?0;
}

你可能感兴趣的:(C++,c,C#)