隐藏头文件中的函数和全局变量

时间:2016-07-14 20:23:24

标签: c header

我在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"函数?

1 个答案:

答案 0 :(得分:1)

虽然您可以将可执行代码放在头文件中,但一个好的做法是让头文件只包含声明(对于全局变量)定义和函数原型。如果您不想提供源代码实现,则需要将函数编译为目标代码,并提供目标文件(作为静态存档或共享库)以及头文件。谁想要使用你的功能,然后将他/她的程序链接到你的objecet文件/共享库。这样,您就可以自己保留源代码实现。您的头文件将是:

#ifndef __SOME_MACRO_TO_PREVENT_MULTIPLE_INCLUSION__
#define __SOME_MACRO_TO_PREVENT_MULTIPLE_INCLUSION__

    int find_determinant();


#endif

注意多个包含问题(我已经在上面说明了如何避免这种情况,这样如果你的matrix.h文件被多次包含,程序仍然可以编译)。