为什么会有extern “C”?

由于C.C++编译规则不同,再C和C++混合开发时候,可能会出现extern “C”

1.在函数实现前加

extern "C" void func() {
	cout << "func()" << endl;
}

2.直接包裹住C语言函数

extern "C" {
	void func() {
		cout << "func()" << endl;
	}
	void func(int a) {
		cout << "func(int a)" << endl;
	}
}

3.如果函数有声明,extern “C”加在函数声明的前面

extern "C"  void func(int a);

或包裹住C函数的声明

extern "C" {
	void func(int a);
	void func();
}

4.如果是有.h和.c文件,如下代码

sum.h的声明

// 防止头文件重复导入
#ifndef __SUM_H
#define __SUM_H

int sum(int a, int b);

#endif // !__SUM_H

注意:

sum.c的实现

#include "sum.h"
int sum(int a, int b) {
	return a + b;
}

直接声明头文件

extern "C" {
	#include "sum.h"
}

4.1.如果编写了C函数库,给别人使用,如果是C语言环境就用C的编译规则,如果是C++环境,就用C++编译 别人使用你的C函数库,只需要导入头文件,比如

#include <iostream>
using namespace std;
#include "sum.h"

int main() {

	cout << sum(1, 2) << endl;
	getchar();
	return 0;
}

需要使用__cplusplus宏

// 防止头文件重复导入
#ifndef __SUM_H
#define __SUM_H

#ifdef __cplusplus
// 颜色是浅色的,说明如果是C语言就不参与编译,如果是C++环境就参与编译
extern "C" {
#endif // __cplusplus

int sum(int a, int b);

#ifdef __cplusplus
}
#endif // __cplusplus

#endif // !__SUM_H