extern c
C++程序有时候需要调用其他程序设计语言编写的函数,最常见的语言是C语言。像任何名字一样,必须声明其他语言编写的函数
名字,该声明必须指定返回类型和参数表。编译器按处理普通c++函数一样的方式检查对外部语言函数的调用,但是,编译器一般
必须产生不同的代码来调用其他语言编写的函数。c++链接指示(linkage directive)指出任意非c++函数所用的语言。
1.声明非C++函数
链接指示有两种形式,单个的或复合的
extern "C" size_t strlen(const char*)
extern"C" {
int strcmp(const char*, const char*);
char* strcat(char*, const char*);
}
2, 链接指示与头文件
可以将多重声明形式应用于整个头文件
extern “C" {
// 链接指示可以嵌套,头文件中即使有链接指示也不会受影响
#include <string.h>
}
3. 导出c++函数到其他语言
//通过链接指示,使得其他语言编写的程序可以使用c++函数
//用链接指示定义的函数的每个声明都必须用相同的链接指示
extern "C" double calc(double dparam);
4. 支持链接指示的语言
exter "Ada" extern "FORTRAN" 支持什么语言随编译器而变。
对链接到C的预处理支持
#ifdef __cplusplus
extern "C"
#endif
it strcmp(const char*, const char*);
5, 重载函数与链接指示
重载函数依赖于目标语言,C语言不支持重载函数。
extern "C" calc(double);
extern SmallInt calc(const SmallInt&);
extern BigNum calc(const bigNum&);
6, extern "C" 函数的指针
// pf points to a C function returning void taking an int
extern "C" void (* pf) (int);
C函数指针与C++函数的指针具有不同的类型,不能将C函数的指针初始化或赋值为C++函数指针
反之亦然。
7,用与整个声明的链接指示
使用链接指示的时候,它应用于函数和任何函数指针,作为返回类型或参数类型使用。
// f1 is a C function, accepting a pointer to a C function.
extern "C" void f1(void (*)(int));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」