C++学习笔记 extern C

原创 2015年07月08日 16:43:30

C++头文件中的extern “C”的作用,一般都是如下形式

#ifdef __cplusplus
extern "C" {
#endif  /* __cplusplus */
中间还有很多其他的
#ifdef __cplusplus
}
#endif  /* __cplusplus */

首先要清楚的是 extern “C”是只有C++编译器才理解的东西,C的编译器会报错的。C++编译器添加这个的目的是为了让c的代码和c++代码能更好的一起工作。
因为编译之后函数的名字都是存放在符号表中的,而且C和C++为函数命名的方式是不同的,如下例

void foo( int x, int y );
c编译后函数名字:_foo
c++编译后名字:_foo_int_int

c++这种方式叫做mangled name,是将函数参数类型加了进来,用以支持重载, 如果用 extern “C”包围的话,C++在编译是就会使用C的函数命名方法来命名

参考: 这篇文章

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C/C++学习笔记(十二)extern的详解

extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字。它告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。extern可以置于变量或者函数前,以标示变量或者函数的定义在...

【从C到C++学习笔记】域运算符/new/delete运算符/重载/Name managling/extern "C"/带函数默认值参数

C++学习笔记(初级篇)——作用域与“extern”关键字

作用域,顾名思义,就是指某个标识符在程序中的有效区域。 在C++中,按作用域的大小,一般可分为局部作用域和全局作用域。 1.局部作用域 局部作用域用大括号,即{},来定义,大括号括起来的范围就是一个局...
  • Dr_Neo
  • Dr_Neo
  • 2015年12月11日 19:17
  • 938

extern "C" 学习笔记

从直观上来讲,extern "C" 显然有两层含义。其一,是 被它修饰的目标是“extern”,即该目标具有外部链接性,可以在其他编译单元(文件)中被引用。其二,被它修饰的目标是“C”类型的,即编译器...

C/C++学习笔记——初次接触递归

初次碰到递归,我便觉得递归就像循环一样,当测试条件为真时,则函数调用其本身,为假时则结束函数调用。而函数参数一般为表达式,用于更新测试条件及使函数进行更进一步的计算。      一个简单的递归例...

C++学习笔记:C的继承与超越——const关键字

C语言中也有const关键字,但是它却是一个不地道的常量关键字。 const int MAX = 100; int a[MAX];在C语言编译器下,定义数组的这条语句往往会报错。定义数组大小需要的是常...

C/C++学习笔记(三)指针、指针与数组、指针与函数

指针就是存着所要调用的数据在内存中的地址的数据类型。

C/C++学习笔记8:内存中数据对齐的问题总结

1:什么是数据对齐? 数据对齐是指数据所在的内存地址必须是该数据长度的整数倍。...

C/C++学习笔记:字符串库函数

1   // 入门级 char *strcpy(char *strDest, const char *strSrc) { if (NULL == strDest || NULL == strSrc...

C/C++学习笔记五(结构体、字符与字符串)

结构体C语言中复杂的数据结构都需要使用结构体表示,在这里说一下结构体的使用要点。结构体内存分布以及对齐问题编译器在为结构体分配内存时,并不会分配和所有成员数据长度和恰好相等的内存空间,而是会考虑到计算...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习笔记 extern C
举报原因:
原因补充:

(最多只允许输入30个字)