extern "C"
ΪʲôÐèҪʹÓÃextern "C"ÄØ£¿C++Ö®¸¸ÔÚÉè¼ÆC++֮ʱ£¬¿¼Âǵ½µ±Ê±ÒѾ´æÔÚÁË´óÁ¿µÄC´úÂ룬ΪÁËÖ§³ÖÔÀ´µÄC´úÂëºÍÒѾдºÃC¿â£¬ÐèÒªÔÚC++Öо¡¿ÉÄܵÄÖ§³ÖC£¬¶øextern "C"¾ÍÊÇÆäÖеÄÒ»¸ö²ßÂÔ¡£
¡¡¡¡ÊÔÏëÕâÑùµÄÇé¿ö:Ò»¸ö¿âÎļþÒѾÓÃCдºÃÁ˶øÇÒÔËÐеúÜÁ¼ºÃ£¬Õâ¸öʱºòÎÒÃÇÐèҪʹÓÃÕâ¸ö¿âÎļþ£¬µ«ÊÇÎÒÃÇÐèҪʹÓÃC++À´Ð´Õâ¸öеĴúÂë¡£Èç¹ûÕâ¸ö´úÂëʹÓõÄÊÇC++µÄ·½Ê½Á´½ÓÕâ¸öC¿âÎļþµÄ»°£¬ÄÇô¾Í»á³öÏÖÁ´½Ó´íÎó.ÎÒÃÇÀ´¿´Ò»¶Î´úÂë:Ê×ÏÈ£¬ÎÒÃÇʹÓÃCµÄ´¦Àí·½Ê½À´Ð´Ò»¸öº¯Êý£¬Ò²¾ÍÊÇ˵¼ÙÉèÕâ¸öº¯Êýµ±Ê±ÊÇÓÃCд³ÉµÄ:
//f1.c
extern "C"
{
void f1()
{
return;
}
}
¡¡¡¡±àÒëÃüÁîÊÇ:gcc -c f1.c -o f1.o ²úÉúÁËÒ»¸ö½Ðf1.oµÄ¿âÎļþ¡£ÔÙдһ¶Î´úÂëµ÷ÓÃÕâ¸öf1º¯Êý:
// test.cxx
//Õâ¸öextern±íʾf1º¯ÊýÔÚ±ðµÄµØ·½¶¨Ò壬ÕâÑù¿ÉÒÔͨ¹ý
//±àÒ룬µ«ÊÇÁ´½ÓµÄʱºò»¹ÊÇÐèÒª
//Á´½ÓÉÏÔÀ´µÄ¿âÎļþ.
extern void f1();
int main()
{
f1();
return 0;
}
¡¡¡¡Í¨¹ýgcc -c test.cxx -o test.o ²úÉúÒ»¸ö½Ðtest.oµÄÎļþ¡£È»ºó£¬ÎÒÃÇʹÓÃgcc test.o f1.oÀ´Á´½ÓÁ½¸öÎļþ£¬¿ÉÊdzö´íÁË£¬´íÎóµÄÌáʾÊÇ:
test.o(.text + 0x1f):test.cxx: undefine reference to 'f1()'
¡¡¡¡Ò²¾ÍÊÇ˵£¬ÔÚ±àÒëtest.cxxµÄʱºò±àÒëÆ÷ÊÇʹÓÃC++µÄ·½Ê½À´´¦Àíf1()º¯ÊýµÄ£¬µ«ÊÇʵ¼ÊÉÏÁ´½ÓµÄ¿âÎļþÈ´ÊÇÓÃCµÄ·½Ê½À´´¦Àíº¯ÊýµÄ£¬ËùÒԾͻá³öÏÖÁ´½Ó¹ý²»È¥µÄ´íÎó:ÒòΪÁ´½ÓÆ÷ÕÒ²»µ½º¯Êý¡£
¡¡¡¡Òò´Ë£¬ÎªÁËÔÚC++´úÂëÖе÷ÓÃÓÃCд³ÉµÄ¿âÎļþ£¬¾ÍÐèÒªÓÃextern "C"À´¸æËß±àÒëÆ÷:ÕâÊÇÒ»¸öÓÃCд³ÉµÄ¿âÎļþ£¬ÇëÓÃCµÄ·½Ê½À´Á´½ÓËüÃÇ¡£
¡¡¡¡±ÈÈ磬ÏÖÔÚÎÒÃÇÓÐÁËÒ»¸öC¿âÎļþ£¬ËüµÄÍ·ÎļþÊÇf.h£¬²úÉúµÄlibÎļþÊÇf.lib£¬ÄÇôÎÒÃÇÈç¹ûÒªÔÚC++ÖÐʹÓÃÕâ¸ö¿âÎļþ£¬ÎÒÃÇÐèÒªÕâÑùд:
extern "C"
{
#include "f.h"
}
¡¡¡¡»Øµ½ÉÏÃæµÄÎÊÌ⣬Èç¹ûÒª¸ÄÕýÁ´½Ó´íÎó£¬ÎÒÃÇÐèÒªÕâÑù×Ó¸Äдtest.cxx:
extern "C"
{
extern void f1();
}
int main()
{
f1();
return 0;
}
¡¡¡¡ÖØÐ±àÒë²¢ÇÒÁ´½Ó¾Í¿ÉÒÔ¹ýÈ¥ÁË.
¡¡¡¡×ܽá
¡¡¡¡CºÍC++¶Ôº¯ÊýµÄ´¦Àí·½Ê½ÊDz»Í¬µÄ.extern "C"ÊÇʹC++Äܹ»µ÷ÓÃCд×÷µÄ¿âÎļþµÄÒ»¸öÊֶΣ¬Èç¹ûÒª¶Ô±àÒëÆ÷ÌáʾʹÓÃCµÄ·½Ê½À´´¦Àíº¯ÊýµÄ»°£¬ÄÇô¾ÍҪʹÓÃextern "C"À´ËµÃ÷¡£
±¾ÎÄת×Ô£ºhttp://www.diybl.com/course/3_program/c++/cppsl/2008810/135631.html
Ïà¹ØÎĵµ£º
ÕâһϵÁÐÎÄÕÂÊÇÎÒ¹¹½¨C/C++²å¼þ¿ª·¢¿ò¼Ü¿ª·Å¿ò¼ÜµÄ¹ý³Ì¡£ºóÃæ»áÒ»Ö±¸üУ¬Ö±ÖÁ¹¹½¨Íê³É¡£
¡¶¹¹½¨×Ô¼ºµÄC/C++²å¼þ¿ª·¢¿ò¼Ü£¨Ò»£©——³õ²½ÉèÏë¡·
¡¶¹¹½¨×Ô¼ºµÄC/C++²å¼þ¿ª·¢¿ò¼Ü£¨¶þ£©——×ÜÌ幦ÄÜ¡·
¡¶
¹¹½¨×Ô¼ºµÄC/C++²å¼þ¿ª·¢¿ò¼Ü£¨Èý£©——×ÜÌå½á¹¹
¡·
¡¶¹¹½¨×Ô¼ºµÄC/C++²å¼þ¿ª·¢¿ò¼ ......
1,·ÀÖ¹Ò»¸öÍ·Îļþ±»Öظ´°üº¬
#ifndef COMDEF_H
#define COMDEF_H
//Í·ÎļþÄÚÈÝ
#endif
2,ÖØÐ¶¨ÒåһЩÀàÐÍ,·ÀÖ¹ÓÉÓÚ¸÷ÖÖÆ½Ì¨ºÍ±àÒëÆ÷µÄ²»Í¬,¶ø²úÉúµÄÀàÐÍ×Ö½ÚÊý²îÒì,·½±ãÒÆÖ²¡£
typedef unsigned char boolean; /* Boolean value type. */
typedef ......
char* my_strrev( char* string )
{
char *left, *right, ch;
left = right = string;
while( *right++ != '\0');
right -= 2;
while( left<right )
{
ch = *left;
*left = *right;
*right = ch;
++left; --right;
&n ......
1.Çø±ð(Ö÷ÒªµÄ):Ö¸ÕëÐèÒªÔö¼ÓÒ»´Î¶îÍâµÄÌáÈ¡²Ù×÷
±àÒëÆ÷Ϊÿ¸ö±äÁ¿·ÖÅäÒ»¸öµØÖ·(×óÖµ)¡£Õâ¸öµØÖ·±àÒëʱ¿ÉÖª£¬¶øÇҸñäÁ¿ÔÚÔËÐÐʱһֱ±£´æÓÚÕâ¸öµØÖ·¡£Ïà·´£¬´æ´¢ÓÚ±äÁ¿ÖеÄÖµ(ËüµÄÓÒÖµ)Ö»ÓÐÔÚÔËÐÐʱ²Å¿ÉÖª¡£Èç¹ûÐèÒªÓõ½±äÁ¿Öд洢µÄÖµ£¬±àÒëÆ÷¾Í·¢³öÖ¸Áî´ÓµØÖ·¶ÁÈë±äÁ¿Öµ²¢½«Ëü´æÓڼĴæÆ÷ÖС£
  ......
#include <stdio.h>
#include <stdlib.h>
#define SIZE 17
void reverse(int start, int end);
int data[SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
int main(void)
{
int i = 5;
reverse(0, i - 1);
reverse(i, SIZE-1);
reverse(0, SIZE-1);
return ......