我在C中创建了一个程序,可以找到矩阵的行列式
void fun1(); /*regardless of parameters they take*/
void fun2();
void fun3();
void fun4();
void fun5();
int global_var1; /*they are used among the above functions*/
int global_var2;
int global_var3;
int determinant;
int main(void){
int x,y;
for(x=0; x<something ; x++){
for (y=0 ; y<another_thing; y++){
fun1();
fun2();
fun3();
}
fun4();
fun5();
}
printf("Determinant is: %d\n", determinant);
return 0;
}
void fun1(){/*code goes here to process the matrix*/;}
void fun2(){/*code goes here to process the matrix*/;}
void fun3(){/*code goes here to process the matrix*/;}
void fun4(){/*code goes here to process the matrix*/;}
void fun5(){/*code goes here to process the matrix*/;}
现在我需要使用这个程序来查找另一个项目中给定矩阵的行列式。
我创建了一个名为"matrix.h"
的头文件,并将int main(void)
替换为int find_determinant()
以在新项目中使用。
第二个程序的原型:
#include "matrix.h"
int main(void){
find_determinant(); /*regardless of para it takes, it works perfectly*/
return 0;}
它工作正常,没有任何问题,但唯一的问题是,如果我想把这个头文件"matrix.h
给某人在他的程序中使用它,他就可以知道其他函数的签名(对于曾经帮助找到int find_determinant()
中的决定因素。
int find_determinant()
的第二个C文件/程序中的#include "matrix.h"
函数?
答案 0 :(得分:1)
虽然您可以将可执行代码放在头文件中,但一个好的做法是让头文件只包含声明(对于全局变量)定义和函数原型。如果您不想提供源代码实现,则需要将函数编译为目标代码,并提供目标文件(作为静态存档或共享库)以及头文件。谁想要使用你的功能,然后将他/她的程序链接到你的objecet文件/共享库。这样,您就可以自己保留源代码实现。您的头文件将是:
#ifndef __SOME_MACRO_TO_PREVENT_MULTIPLE_INCLUSION__
#define __SOME_MACRO_TO_PREVENT_MULTIPLE_INCLUSION__
int find_determinant();
#endif
注意多个包含问题(我已经在上面说明了如何避免这种情况,这样如果你的matrix.h文件被多次包含,程序仍然可以编译)。