extern “C“使用方法__演变过程

一、概念:被extern "C"修饰的代码会按照C语言的方式去编译。

1. 直接使用extern “C”

#inlcude <iostream>
using namespace std;
extern "C" void func(){
   
	cout << "func()" << endl;
}

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

int main() {
   
	
	return 0;
}

上面的例子,如果取消extern “C”,编译不会报错,因为C++支持函数重载,加上extern "C"后按照C语言的方式编译会提示重定义。

2.extern “C” { }

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

二、如果函数同时有声明和实现,要让函数声明被extern "C"修饰,函数实现可以不修饰

extern "C" void func();
// 或 extern "C"{ void func(); }

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

三、由于C、C++混合开发

1.第三方库可能是C写的。

c库

int sum(int v1, int v2) {
   
	return v1 + v2;
}
int delta(int v1, int v2) {
   
	return v1 - v2;
}

c++无法按下面方法直接调用,会提示找不到函数

int main() {
   
	cout << sum(10, 20) << endl;
	cout << delta(30, 20) << endl;
	return 0;
}

可以按照以下方式来调用

extern "C" {
     //只需要修饰声明
	int sum(int v1, int v2);
	int delta(int v1, int v2);	
}
int main() {
   
	cout << sum(10, 20) << endl;
	cout << delta(30, 20) << endl;
	return 0;
}

如果其他cpp文件调用c库时,又需要extern “C” {};肯定不行,
一般将extern “C” {},放到头文件声明中,但在C环境中又不识别extern “C” ;
最终通过条件编译来解决同时在c,c++中使用的问题。
Cpp文件,默认带有 #define __cplusplus
所以有最终版本,头文件中:

#ifndef __MATH_H
#define __MATH_H

#ifdef __cplusplus
	extern "C" {
   
#endif // __cplusplus

	int sum(int v1, int v2);
	int delta(int v1, int v2);
	
#ifdef __cplusplus
	}
#endif // __cplusplus

#endif //__MATH_H

相关推荐

  1. extern “C“使用方法__演变过程

    2023-12-08 10:28:04       41 阅读
  2. c#委托 匿名方法和lamada表达式演变过程代码演示

    2023-12-08 10:28:04       33 阅读
  3. 委托 lambda linq之间的演变过程

    2023-12-08 10:28:04       12 阅读
  4. extern和static的使用与区别

    2023-12-08 10:28:04       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 10:28:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 10:28:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 10:28:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 10:28:04       18 阅读

热门阅读

  1. swiper和video实现抖音刷视频功能

    2023-12-08 10:28:04       43 阅读
  2. Django的回顾的第4天

    2023-12-08 10:28:04       25 阅读
  3. Django二转Day06

    2023-12-08 10:28:04       33 阅读
  4. Groovy介绍和使用

    2023-12-08 10:28:04       27 阅读