如何在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;
}
封装成功,调用成功。