实现C程序调用C++代码及C++程序调用C代码

在学习过程中,一次偶然的经历让自己产生了一些想法。对于常常使用的在.c文件中自定义的函数,能否在.cpp文件中使用呢?反之,.cpp文件中的函数能否在.c文件中使用呢?经过相关资料的查询,发现其实这是完全可以的,下面将对其进行详细

目录

                  C程序调用C++代码

C++程序调用C代码 


  C程序调用C++代码

首先我们给出一段代码:

在.c文件中:

#include<stdio.h>

int add(int a, int b);
int main()
{
	int a = 10;
	int b = 20;
	int res = add(a, b);
	printf("res:%d\n",res);
	return 0;
}

在.cpp文件中:

#include<iostream>
using namespace std;

int add(int a, int b)
{
	return a + b;
}

在编译过程中产生这样一个错误:

经过分析发现,对于编译器而言,同一个函数在不同的文件中其符号的生成规则不同,以上述add函数为例。在.c文件中,依照C规则进行编译,其生成符号就为函数名字;而在.cpp文件中,则按照C++规则进行编译,其生成符号不仅是函数名还有参数。因此在链接过程中,由于同一个函数有不同的符号,因此出现无法解析的外部符号错误。说白了,编译器又不会像人类一样通过一个人的内在便可以认出一个人,编译器就认名字,名字变了自然就不认识了。

解决方法:我们可以通过extern “C”来完成调用,将.cpp函数定义部分包含在extern “C”括弧中,编译器便可以将括弧里面的能容依据C规则进行编译,生成的符号自然就和.c文件中函数生成的符号相同,于是便可以解决上述问题。具体做法如下:

#include<iostream>
using namespace std;

extern "C"
{
	int add(int a, int b)
	{
		return a + b;
	}
}

运行结果:


C++程序调用C代码

C++程序调用C代码和C程序调用C++代码一样,只需要将.cpp文件中的函数声明放在extern “C”括弧中即可。具体如下:

在.c文件中:

#include<stdio.h>

int add(int a, int b)
{
	return a + b;
}

在.cpp文件中:

#include<iostream>
using namespace std;

extern "C"
{
	int add(int a, int b);
}

int main()
{
	int a = 10;
	int b = 20;
	int res = add(a, b);
	cout << "res:" << res << endl;
	return 0;
}

运行结果:

发布了40 篇原创文章 · 获赞 124 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/FDk_LCL/article/details/97539959
今日推荐