extern “C“

extern “c”

  • 被extern "c"修饰的代码会按照c语言的方式编译
  • 如果函数同时有声明和实现,要让函数声明被 extern "C"修饰,函数实现可以不被修饰
extern "C" void fun() {
	cout << "fun()" << endl;
}
extern "C" void fun(int c) {
	cout << "fun(int c)" << endl;
}
//另一种写法
extern "C" {
	void fun() {
		cout <<" fun()" << endl;
	}
	void fun(int c) {
		cout <<"fun(int c)" << endl;
	}
}

用途

  • c、c++混合开发过程中。第三方框架、库可能是用c语言实现的,在cpp中调用就会出现问题。
int sum(int a,int b){
	return a+b;
}
在cpp文件中按照c++方式编译,函数名叫 sum_i_i
在c文件中按照c方式编译,函数名叫_sum。就会找不到。

写法

//规范写法,防止头文件重复包含
#ifndef __MATH_H
#define __MATH_H

//宏__cplusplus .cpp文件默认包含
//条件编译这样c++,c语言都可以调用。
//c编译器不认识 extern "C"
//c的源文件中也应该包含 #include "math.h",源文件中也可能相互调用
#ifdef __cplusplus
	extern "C"{
#endif // __cplusplus

int sum(int a, int b);
int delta(int a, int b);
int divide(int a, int b);

#ifdef __cplusplus
	}
#endif // __cplusplus

#endif

函数的声明来自:

  • 头文件
  • 自己写

pragma once

  • 1:#ifndef#defineendif不受编译器限制
  • 2:#pragma once有些编译器不支持
  • 1可以针对文件中的部分代码;2只能针对整个文件

你可能感兴趣的:(cpp)