如何在VS中把封装的函数放在头文件中(即多文件编程)

如何在VS中把封装的函数放在头文件中(即多文件编程)

1、首先准备好要封装的函数文件,并且均能调试成功。本文将矩阵的求逆代码文件放到头文件中,之后再主函数中直接调用。矩阵求逆的代码如下:

#include <math.h>
#include <string.h>

void inverse(const double src[9], double res[9])
{
	double x[9];
	int p1;
	int p2;
	int p3;
	double absx11;
	double absx21;
	double absx31;
	int itmp;
	memcpy(&x[0], &src[0], 9U * sizeof(double));
	p1 = 0;
	p2 = 3;
	p3 = 6;
	absx11 = fabs(src[0]);
	absx21 = fabs(src[1]);
	absx31 = fabs(src[2]);
	if ((absx21 > absx11) && (absx21 > absx31)) {
		p1 = 3;
		p2 = 0;
		x[0] = src[1];
		x[1] = src[0];
		x[3] = src[4];
		x[4] = src[3];
		x[6] = src[7];
		x[7] = src[6];
	}
	else {
		if (absx31 > absx11) {
			p1 = 6;
			p3 = 0;
			x[0] = src[2];
			x[2] = src[0];
			x[3] = src[5];
			x[5] = src[3];
			x[6] = src[8];
			x[8] = src[6];
		}
	}

	x[1] /= x[0];
	x[2] /= x[0];
	x[4] -= x[1] * x[3];
	x[5] -= x[2] * x[3];
	x[7] -= x[1] * x[6];
	x[8] -= x[2] * x[6];
	if (fabs(x[5]) > fabs(x[4])) {
		itmp = p2;
		p2 = p3;
		p3 = itmp;
		absx11 = x[1];
		x[1] = x[2];
		x[2] = absx11;
		absx11 = x[4];
		x[4] = x[5];
		x[5] = absx11;
		absx11 = x[7];
		x[7] = x[8];
		x[8] = absx11;
	}

	x[5] /= x[4];
	x[8] -= x[5] * x[7];
	absx11 = (x[5] * x[1] - x[2]) / x[8];
	absx21 = -(x[1] + x[7] * absx11) / x[4];
	res[p1] = ((1.0 - x[3] * absx21) - x[6] * absx11) / x[0];
	res[p1 + 1] = absx21;
	res[p1 + 2] = absx11;
	absx11 = -x[5] / x[8];
	absx21 = (1.0 - x[7] * absx11) / x[4];
	res[p2] = -(x[3] * absx21 + x[6] * absx11) / x[0];
	res[p2 + 1] = absx21;
	res[p2 + 2] = absx11;
	absx11 = 1.0 / x[8];
	absx21 = -x[7] * absx11 / x[4];
	res[p3] = -(x[3] * absx21 + x[6] * absx11) / x[0];
	res[p3 + 1] = absx21;
	res[p3 + 2] = absx11;
}

2、新建一个VS工程,新建一个头文件,在本例中,头文件的名称为inverse.h 步骤如下图所示:
在这里插入图片描述

3、在头文件工作框中输入如下代码:

#ifndef __HEAD_H__		
#define __HEAD_H__

			.... 头文件内容

#endif

注:头文件内容包括主代码和头文件等。

4、头文件的内容即为你要封装的函数代码块,在本例中就是将 1 步中的代码全部粘贴进去,这样头文件就已经写好了。

5、新建一个 main.c 文件(创建方法与创建头文件一样,只不过是在原文件中添加新建项)

6、直接用 #include “inverse.h” ,本例中函数代码如下:

#include <stdio.h>
#include "inverse.h"
int main()
{
	double a[9] = { 1,0,1,0,2,1,1,1,1 };
	double b[9];
	inverse(a, b);
	
	for (int i = 0; i < 9; i++)
	{
		printf("%f ", b[i]);
		printf("\n");
	}
	return 0;
}

封装成功,调用成功。

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值