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” 》 :