1 为什么使用extern "c"?
用extern "C"修饰的代码,表示用C语言的方式进行编译和链接。
编译:
extern "C" 
{ 
void f1() 
{ 
return; 
} 
}  
//表示这段代码使用C语言的方式进行编译

链接:如果在C++中使用C代码,需要用extern "C"包含C的头文件,即采用C的方式进行链接。

a  在cpp文件中链接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"
{
#include 
"cExample.h"
}

int main(int argc, char* argv[])
{
        add(
2,3);
        
return 0;
}

b 在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;
}

2 宏编译

#ifndef __INCvxWorksh
    
#define __INCvxWorksh

    #ifdef __cplusplus
    
extern "C" {
    
#endif

    
/**/

    #ifdef __cplusplus
    }
    
#endif

    
#endif /* __INCvxWorksh */

分析:
显然,头文件中的编译宏“#ifndef __INCvxWorksh、
#define __INCvxWorksh、#endif” 的作用是防止该头文件被重复引用

3 











 posted on 2009-08-24 09:45  清水湾  阅读(187)  评论(0)    收藏  举报