C++如何调用C

本文提供了一个C++调用C程序的具体示例,包括矩阵相乘的函数定义及其实现,展示了如何通过预处理器指令正确地进行跨语言调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++程序调用C程序时,会出现编译错误,下面给出解决该问题的实例。

//MathFun.h

#ifndef MATHFUN_H
#define MATHFUN_H

#ifdef __cplusplus
extern "C"{
#endif
#include <assert.h>

/*
*	函数名:matMult
*	功能:实现两矩阵相乘。
*	参数:
*		double fstMat[] - 存放矩阵A的元素
*		double sndMat[] - 存放矩阵B的元素
*		int fstRows - 矩阵A与乘积矩阵C的行数
*		int rowsCols - 矩阵A的列数,矩阵B的行数
*		int sndCols - 矩阵B与乘积矩阵C的列数
*		double destMat[] - 返回乘积矩阵C=A*B的元素
*	返回值:void
*	作者:LYC
*	日期:2013-07-04
*/

void matMult(double fstMat[], double sndMat[], int fstRows, int rowsCols, int sndCols, double destMat[]);

#ifdef __cplusplus
};
#endif

#endif

//MathFun.c文件(注意是.c文件)

#include "MathFun.h"

void matMult(double fstMat[], double sndMat[], int fstRows, int rowsCols, int sndCols, double destMat[])
{
	int i,j,t;
	for (i=0; i<fstRows; i++) //对应destMat的行
	{
		for (j=0; j<sndCols; j++) //对应destMat的列
		{
			for (t=0; t<rowsCols; t++) //求和
			{
				destMat[i*sndCols + j] = fstMat[i*rowsCols + t] * sndMat[t*sndCols + j];
			}
		}
	}
}


//main.c文件(注意是.c文件)
#include "stdio.h"
#include "MathFun.h"
#include <malloc.h>
#include <memory>

void main()
{
	int m = 1;
	int n = 2;
	int k = 1;
	double *pA = (double *)malloc(m * n * sizeof(double));
	pA[0] = 1;
	pA[1] = 2;
	double *pB = (double *)malloc(n * k * sizeof(double));
	pB[0] = 2;
	pB[1] = 1;
	double *pC = (double *)malloc(m * k * sizeof(double));
	memset(pC, 0, m * k * sizeof(double));

	matMult(pA, pB, m, n, k, pC);

	getchar();
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东山一角

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值