利用extern实现cpp中调用c函数

目录

概念一览

  • extern “C” 用来在cpp程序中实现对c程序函数的调用;
  • C语言和C++语言在编译结束之后生成的函数名是不同的:C++规则下生成的函数名与参数的数量和类型有关?造成的结果就是,cpp程序调用c中的函数时,找不到函数,即:函数名不匹配;
  • 在cpp中,利用extern “C”,告诉编辑器,该函数的编译采用C语言的规则,则生成的函数名与C程序中实现的函数函数名相同,故可以实现调用;
  • 下例中,由于__cplusplus 这个宏是C++中特有的,加载 C++文件的时候会提前定义这个宏,因此我们进行判断:有这个宏就是 C++在调用,没有的话就是 C在调用;

代码部分↓

// cpp中调用c.h------------------------------------------------------
#pragma once
#ifndef __SUM_H
#define __SUM_H

#ifdef __cplusplus
extern "C" {  // 该行代码在C++调用时,生效
#endif
    int sum_of_c(int a, int b);   // 函数声明
#ifdef __cplusplus
}  // 该括号在C++调用时,生效
#endif
#endif

// cpp中调用c.c-------------------------------------------------------
#include "cpp中调用c.h"
#include <stdio.h>

// 函数实现,采用C语言的形式
int sum_of_c(int a, int b) {
	return a + b;
}

// cpp中调用c.cpp-----------------------------------------------------
#include <iostream>
#include "cpp中调用c.h"
using namespace std;

extern "C" int sum_of_c(int a,int b);  // C语言规则进行编译

int main() {
	int result;
	result = sum_of_c(5,7);
	cout << "因为c和cpp对同一个带参函数编译后的函数名不同 \n因此函数实现放在.c文件中的话,.cpp文件执行时链接不到该函数"<<endl;
	cout << "但结果告诉我们:cpp文件按照c的方式执行了,因此函数名和.c中的函数实现对应上了,找到了 \n5 + 7求和的结果是:" << result << endl;
	return 0;
}

运行结果如下↓
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值