被extern \"C\" 修饰后按照C语言编译
录屏软件 FSCapture
extern "C" c语言编译 会发现报错,C语言不支持函数重载
#include <iostream>
using namespace std;
extern "C" void func() {
}
extern "C" void func(int v) {
}
int main() {
getchar();
return 0;
}还可以extern "C" {}全部包含修饰;只声明函数声明的地方也可以
使用语言都会使用到第三方框架/库
可能是用C语言写的开源库
- C++想调用开源C语言的库 使用extern "C" {}
math.c
int sum(int v1, int v2){
return v1 + v2;
}
int delta(int v1, int v2) {
return v1 - v2;
}将函数的实现放到源文件C,将函数的声明放到头文件,方便大量文件使用

C++使用库文件时直接包含
#include <iostream>
using namespace std;
extern "C" {
#include "math.h"
}
int main() {
cout << sum(10, 20) << endl;
cout << delta(10, 20) << endl;
getchar();
return 0;
}直接将extern "C"放头文件中,但是要考虑C语言的库在C语言中也会调用的问题
#include <iostream>
using namespace std;
#include "math.h"
int main() {
cout << sum(10, 20) << endl;
cout << delta(10, 20) << endl;
getchar();
return 0;
}C和C++同时调用C语言库,不是C++环境extern "C"将不起作用
这需要宏定义 编译器在C++环境里面预先定义了一个宏,只要是C++文件就有一个隐形的宏存在 #define __cplusplus 定义在最前面,隐形的代码,如下所示 #define __cplusplus //c++文件默认加的,看不见,不需要额外写 #include <iostream> using namespace std;
用这个#define __cplusplus宏的差异来区分是不是C++环境
头文件的math.h定义
#ifdef __cplusplus
extern "C" {
#endif
int sum(int v1, int v2);
int delta(int v1, int v2);
#ifdef __cplusplus
}
#endif防止重复包含,包起来判断
#ifndef ABC //判断宏ABC有没有定义 #define ABC #endif
- 最终头文件如下,判断是否重复定义宏
#ifndef math.h
#define math.h
#ifdef __cplusplus
extern "C" {
#endif
int sum(int v1, int v2);
int delta(int v1, int v2);
#ifdef __cplusplus
}
#endif
#endif 相关推荐
MYRENZHIBO 2019-08-28
qingsongzdq 2020-01-17
KilluaZoldyck 2020-01-10
lynjay 2020-01-09
lsfreeing 2020-01-09
beibeijia 2019-12-29
liuweinn 2010-09-21
Pipcie 2011-03-03
旭灿 2010-10-27
一亩半分地 2011-10-18
徐建岗网络管理 2019-08-02
electricperi 2019-08-02
newdye 2011-01-10
makeWorks 2019-07-01
83457317 2011-02-16
Joymine 2012-08-29
小小小石头 2011-08-17