【C++快速上手】十三、extern学习笔记
2023-09-11 14:20:36 时间
总结
- 在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。所以使用extern "C"全部都放在于cpp程序相关文件或其头文件中。
1、C++与C编译区别
在C++中常在头文件见到extern "C"修饰函数,那有什么作用呢? 是用于C++链接在C语言模块中定义的函数。
C++虽然兼容C,但C++文件中函数编译后生成的符号与C语言生成的不同。因为C++支持函数重载,C++函数编译后生成的符号带有函数参数类型的信息,而C则没有。
例如int add(int a, int b)函数经过C++编译器生成.o文件后,add会变成形如add_int_int之类的, 而C的话则会是形如_add, 就是说:相同的函数,在C和C++中,编译后生成的符号不同。
2、C++调用C函数
C++调用C函数的例子: 引用C的头文件时,需要加extern “C”
(1)C++调用C函数:
//xx.h
extern int add(...)
//xx.c
int add(){
}
//xx.cpp
extern "C" {
#include "xx.h"
}
3、C中调用C++函数
extern "C"在C中是语法错误,需要放在C++头文件中。
C调用C++函数
//xx.h
extern "C"{
int add();
}
//xx.cpp
int add(){
}
//xx.c
extern int add();
综上,总结出使用方法,在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。所以使用extern "C"全部都放在于cpp程序相关文件或其头文件中。
相关文章
- Effective C++笔记(二):构造/析构/赋值运算
- C++入门笔记
- 【C++学习笔记】存储类
- C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)
- C++ Primer 学习笔记_41_STL实践与分析(15)--先来看看算法【下一个】
- 《C++ Primer Plus》学习笔记3
- 《Effective C++ 》学习笔记——条款03
- Lua学习笔记6:C++和Lua的相互调用
- C++学习笔记9-运算符重载
- C++ Primer 学习笔记_40_STL实践与分析(14)--概要、先来看看算法【上】
- C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
- C++Primer学习笔记4-基本函数
- C++Primer学习笔记3-类
- C++Primer笔记——5.语句
- 黑马C++笔记——演讲比赛流程管理系统
- C++标准库 -- 关联容器 (Primer C++ 第五版 · 阅读笔记)
- C/C++学习笔记 C++中的智能指针
- C/C++学习笔记十一
- C/C++学习笔记三
- C/C++学习笔记 C++中用于动态内存的new和delete运算符