Cコンパイラがコンパイルした関数はどのようにC++の中で使用します


15. C++       C          ,     extern “C”?
  ,  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++            ,             。                      ,   "."   。    ,         ,        ,                  ,                     。

  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
#i nclude "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"       :
extern "C"    

(1) C++   C         ,   C     (   cExample.h) ,       :
extern "C"
{
#i nclude "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 */
#i nclude "cExample.h"
int add( int x, int y )
{
return x + y;
}

// c++    ,  add:cppFile.cpp
extern "C" 
{
#i nclude "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
#i nclude "cppExample.h"
int add( int x, int y )
{
return x + y;
}

/* C     cFile.c
/*        :#i nclude "cExample.h" */
extern int add( int x, int y );
int main( int argc, char* argv[] )
{
add( 2, 3 ); 
return 0;
}
15        《C++ extern “C”      》  :