CÖÐÈçºÎµ÷ÓÃC++º¯Êý
CÖÐÈçºÎµ÷ÓÃC++º¯Êý?
ǰÕó×Ó±»Îʼ°Ò»¸öÔÚCÖÐÈçºÎµ÷ÓÃC++º¯ÊýµÄÎÊÌ⣬µ±Ê±¼òµ¥»Ø´ðÊǽ«º¯ÊýÓÃextern "C"ÉùÃ÷£¬µ±±»Îʼ°ÈçºÎ½«ÀàÄÚ³ÉÔ±º¯ÊýÉùÃ÷ʱ£¬Ò»Ê±ÓïÈû£¬ºóÀ´ÍøÉϲéÁËÏ£¬ÍøÉÏÓÐÒ»·ÒëC++Ö®¸¸µÄÎÄÕ¿ÉÒÔ×÷Ϊ½â´ð£¬ËìÄÃÀ´Markһϡ£
½« C++ º¯ÊýÉùÃ÷Ϊ``extern "C"''£¨ÔÚÄãµÄ C++ ´úÂëÀï×öÕâ¸öÉùÃ÷£©£¬È»ºóµ÷ÓÃËü£¨ÔÚÄãµÄ C »òÕß C++ ´úÂëÀïµ÷Óã©¡£ÀýÈ磺
// C++ code:
extern "C" void f(int);
void f(int i)
{
// ...
}
È»ºó£¬Äã¿ÉÒÔÕâÑùʹÓà f()£º
/* C code: */
void f(int);
void cc(int i)
{
f(i);
/* ... */
}
µ±È»£¬ÕâÕÐÖ»ÊÊÓÃÓڷdzÉÔ±º¯Êý¡£Èç¹ûÄãÏëÒªÔÚ C Àïµ÷ÓóÉÔ±º¯Êý£¨°üÀ¨Ð麯Êý£©£¬ÔòÐèÒªÌṩһ¸ö¼òµ¥µÄ°ü×°£¨wrapper£©¡£ÀýÈ磺
// C++ code:
class C
{
// ...
virtual double f(int);
};
extern "C" double call_C_f(C* p, int i) // wrapper function
{
return p->f(i);
}
È»ºó£¬Äã¾Í¿ÉÒÔÕâÑùµ÷Óà C::f()£º
/* C code: */
double call_C_f(struct C* p, int i);
void ccc(struct C* p, int i)
{
double d = call_C_f(p,i);
/* ... */
}
Èç¹ûÄãÏëÔÚ C Àïµ÷ÓÃÖØÔØº¯Êý£¬Ôò±ØÐëÌṩ²»Í¬Ãû×ֵİü×°£¬ÕâÑù²ÅÄܱ» C ´úÂëµ÷Óá£ÀýÈ磺
// C++ code:
void f(int);
void f(double);
extern "C" void f_i(int i) { f(i); }
extern "C" void f_d(double d) { f(d); }
È»ºó£¬Äã¿ÉÒÔÕâÑùʹÓÃÿ¸öÖØÔØµÄ f()£º
/* C code: */
void f_i(int);
void f_d(double);
void cccc(int i,double d)
{
f_i(i);
f_d(d);
/* ... */
}
×¢Ò⣬ÕâЩ¼¼ÇÉÒ²ÊÊÓÃÓÚÔÚ C Àïµ÷Óà C++ Àà¿â£¬¼´Ê¹Äã²»ÄÜ£¨»òÕß²»Ï룩ÐÞ¸Ä C++ Í·Îļþ¡£
¸Ã·ÒëµÄÎĵµBjarne StroustrupµÄÔÎÄÁ´½ÓµØÖ·ÊÇ
http://www.research.att.com/~bs/bs_faq2.html#callCpp
Ïà¹ØÎĵµ£º
µ±½ñÓÐÐí¶àÃâ·ÑµÄ RDBMS£¨Relational Database Management
System£¬¹ØÏµÊý¾Ý¿â¹ÜÀíϵͳ£©£¬ÆäÖÐһЩÊÇ¿ª·ÅÔ´ÂëÈí¼þ£¬ÁíһЩÊÇÉÌÒµ³§ÉÌÌṩµÄÃâ·Ñ²úÆ·¡£Èç¹ûÄúÕýÔÚʹÓà C/C++¡¢Java™¡¢.NET
»ò PHP
¿ª·¢Ó¦ÓóÌÐò£¬ÏëѰÕÒÒ»ÖÖ¿É¿¿µÄÊý¾Ý·þÎñÆ÷£¬Ï£ÍûËüÖ§³ÖÏȽøµÄ¼¼Êõ¡¢¾ßÓв»¶ÏÀ©´óµÄ¿ª·¢ÈËÔ±ÉçÇø²¢ÒѾ²¿ÊðÔÚÐí¶à¹Ø¼ ......
ÈçºÎÀí½âC run-time library £¨CÔËÐÐʱ¿â£©
×¢£º ÒÔÏÂÄÚÈݲ¿·ÖÒý×ÔCSNDÖÐÏà¹ØÌÖÂÛµÄÌû×Ó£¬²¢½áºÏ×Ô¼ºµÄÀí½âÕûÀí¶ø³É¡£½ö¹©²Î¿¼¡£
1)ÔËÐÐʱ¿â¾ÍÊÇ C run-time library£¬ÊÇ C ¶ø·Ç C++ ÓïÑÔÊÀ½çµÄ¸ÅÄî:È¡Õâ¸öÃû×Ö¾ÍÊÇÒòΪÄãµÄ C ³ÌÐòÔËÐÐʱÐèÒªÕâЩ¿âÖеĺ¯Êý.
2)C ÓïÑÔÊÇËùνµÄ“СÄں˔ÓïÑÔ£¬¾ÍÆäÓïÑÔ±¾ÉíÀ´Ë ......
C/C++´«µÝ¶þάÊý×é - [IT×ÊÁÏ]
//cÓïÑÔÖо³£ÐèҪͨ¹ýº¯Êý´«µÝ¶þάÊý×飬ÓÐÈýÖÖ·½·¨¿ÉÒÔʵÏÖ£¬ÈçÏ£º
//·½·¨Ò»£¬ Ðβθø³öµÚ¶þάµÄ³¤¶È¡£
#include <stdio.h>
void func(int n, char str[][5])
{
int i;
& ......
±àÒëµ¥¸öÔ´Îļþ
ΪÁ˽øÐвâÊÔ£¬Äã¿ÉÒÔ´´½¨“Hello World”³ÌÐò£º
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf(”Hello world!\n”);
exit(0);
}
ʹÓÃÈçÏÂÃüÁî±àÒë²¢²âÊÔÕâ¸ö´úÂ룺
# gcc -o hello hello.c
# ./hello
Hello wordl!
ÔÚÄ ......