Extern "C"
来源:互联网 发布:mac地址烧录1.36 编辑:程序博客网 时间:2024/05/02 02:00
extern “C” 是一个双向都需要用到的语法表示,就是说在cpp引用c头文件,或者c引用cpp文件时都需要用到。
但extern “C” 永远只能在cpp引用时出现,c引用时不允许存在。
1. 当cpp引用c中的函数时,需要在cpp使用的头文件中声明extern “C”
2. 当c引用cpp中的函数时,需要在cpp使用的头文件中用extern “C”声明
这样编译器在编译时会对函数名进行特殊处理,以使其能够被c引用。如果不进行声明,那么当c引用这个头文件时,就会找不到函数,因为cpp的函数命名规则中包含变量类型,而c编译后的函数名不包含这些。
(1)在C++中引用C语言中的函数和变量,在包含C语言头文件(假设为cExample.h)时,需进行下列处理:
extern "C"
{
#include "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 */
#include "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;
}
如果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
#include "cppExample.h"
int add( int x, int y )
{
return x + y;
}
/* C实现文件 cFile.c
/* 这样会编译出错:#include "cExample.h" */
extern int add( int x, int y );
int main( int argc, char* argv[] )
{
add( 2, 3 );
return 0;
}
- extern &&extern c
- extern, extern "C",__stdcall
- extern与extern "C"
- extern 和extern "C"
- extern与extern “C”
- extern 与 extern "C"
- extern 和 extern“C”
- c/c++:extern,extern "C"
- extern“C” ???
- extern "C"
- C extern
- extern"c"
- extern "C"
- extern "C"
- extern "C" {}
- C extern
- extern "C"
- extern c
- linuxcode_turing
- 有一个数组,存储的元素为1到10000000的任意数,在其中查找出一个重复的数字
- java发送邮件
- HTML学习
- orcale优化统计以及占位操作、统计函数的应用(1)
- Extern "C"
- 各个版本的iPhone SDK下载地址
- C# 多态的实现
- 精彩技术备忘链接
- 用XMLHttpRequest对象打造AJAX
- ubuntu9.10使用小结
- VS2005的R6034错误
- 03-04 创建和编辑AutoCAD实体(四) 编辑二维命名对象 (3)
- 新版博客专家实名制处理结果公示:未提供实名的专家将取消专家称号