[转]extern "C"的作用
extern "C"的主要作用就是为了能够正确实现C++代码调用其它C语言代码。
加上extern “C”后,会指示编译器将这部分代码按C语言进行编译,而不是C++的。这是因为C++支持函数重载,因此,编译器在编译函数的过程中会将函数参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。
extern "C"包含两层含义:
1. extern关键字告诉编译器其声明的函数和变量可以在本模块或其他模块中使用。
在模块的头文件中对本模块提供给其他模块引用的函数和全局变量以关键字extern生命。与extern对应的是static,static表明变量或函数只能在本模块中使用,因此,被static修饰的变量或函数是不可能被extern “C”修饰的。
2. “C”表示编译器在编译时会按照C编译器的方式进行编译。
extern "C"使用要点:
1. 可以是单一语句
extern "C" double sqrt(double);
2. 可以是复合语句,这相当于复合语句中的声明都加上了extern “C”
extern "C"
{
double sqrt(double);
int min(int, int);
}
3. 可以包含头文件,相当于头文件中的声明都加上了extern “C”
extern "C"
{
#i nclude <cmath>
}
4. 不可以将extern “C”添加在函数内部
5. 如果函数有多个声明,可以都加extern “C”,也可以只出现在第一次的声明中,后面的声明会接受第一个链接指示符的规则。
6. 除了extern “C”,还有extern “FORTRAN”等。
参考:https://www.cnblogs.com/carsonzhu/p/5272271.html
[转]extern "C"的作用的更多相关文章
- extern "C"的作用
一.概述 在C语言的头文件中,经常可以看到如下的代码,那这个是什么作用呢? #ifdef __cplusplus extern "C" { #endif /*...*/ #ifde ...
- extern C的作用详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码.加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C+ ...
- C++编译时函数名修饰约定规则(很具体),MFC提供的宏,extern "C"的作用
调用约定: __cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数 ...
- extern “C”的作用详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码.加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C+ ...
- C++之 extern C的作用详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码.加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C+ ...
- extern "c" 的作用
作用:实现C和C++混合编程. 原理:C和C++编译器编译之后,函数名会编译成不同的名字,链接阶段名字查找会找不到目标,后面实例中会详解. 用法:①.c文件中定义的函数,.cpp文件要调用时,该.cp ...
- extern “C”的作用
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++保留了一部分过程 式 ...
- extern C的作用具体解释
转载于:http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html 1.引言 C++语言的创建初衷是"a better ...
- 你真的知道C语言里extern "C" 的作用吗?
经常在C语言的头文件中看到下面的代码: #ifdef __cplusplus extern "C" { #endif // all of your legacy C code he ...
随机推荐
- 为springboot项目添加springboot-admin监控
我们知道spring-boot-actuator暴露了大量统计和监控信息的端点,spring-boot-admin 就是为此提供的监控项目. 先来看看大概会提供什么样的功能 从图中可以看出,主要内容都 ...
- SpringBoot自动配置注解原理解析
1. SpringBoot启动主程序类: @SpringBootApplication public class DemoApplication { public static void main(S ...
- [转]npm、 cnpm、yarn
本文转自:https://blog.csdn.net/sinat_34682450/article/details/79473658 终于搞懂了三者之间的关系- 要知道三者之间的关系首先要了解三个包管 ...
- .net core 基于IIS发布
原文链接: https://www.cnblogs.com/gx018/p/7874060.html
- .net敏捷开发框架 力软(learun) 让开发变的更简单
版本:6.1.6.2 体验地址:www.fishcmonkey.com 联系QQ:6539471
- WPF 使用 Direct2D1 画图入门
本文来告诉大家如何在 WPF 使用 D2D 画图. 本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WP ...
- oracle创建用户、创建表空间、授权、建表
2.然后我就可以来创建用户了. create user zzg identified by zzg123; 3.创建好用户我们接着就可以修改用户的密码. alter user zzg identifi ...
- Visual Studio 代码风格约束
团队内部若能统一代码风格对于日后的项目维护大有裨益,但面对厚达十几甚至几十页的代码风格规范,开发人员难免产生抵触心理.Python和Go等在语言层面就对代码风格作了一定的约束,但C#并没有,为解决这个 ...
- 在 浏览器中调用外接设备— —手写板 【win10 x64 手动注册ocx控件的方法】
PPAXSignToolSDK.ocx 浏览器下使用手写板时调用的控件,使用前必须先注册,,不然浏览器下版本无法正常工作. ocx 控件在安装包运行时会自动注册,如果安装包没有注册成功,需要进行手动注 ...
- 【mysql】service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误
service MySQL start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下: [root@ctohome.com ~]# service ...