读书人

C语言模块quot;私有quot;变量,宣言在.c和声明在

发布时间: 2013-06-26 14:29:32 作者: rapoo

C语言模块"私有"变量,声明在.c和声明在.h文件中的困惑
比如做一个打log的模块,需要有char* filename, FILE* fp这些变量,不希望使用log模块的用户去关心,他们只要调用诸如CREATELOG,WRITELOG("abc")之类的宏就好了.

所以,我把这些变量放在log.c文件里,当作全局变量.下面各个函数内部用就行了.
createlog()
{
openfile(filename);
}

这样有个问题,如果log模块不是放在一个.c文件里,而是放在几个.c文件里实现log1.c/log2.c,就需要在每个
log.c文件里声明一下
extern char* filename
extern FILE* fp

简单的解决办法就是把它们都放在log.h文件里(log模块虽然有好几个log.c,但因为是一个模块,所以只有一个log.h文件).
每个log.c文件里include log.h就行了.

但这样就把"私有"的成员变量暴露给用户了.C++变量可以写在类里(成员变量),没有这个问题.
C语言是怎么解决的呢?
[解决办法]
我看了国外大神们写的代码,也都是.c文件里
static char* filename这样

你如果懒得每个文件里都声明,那就写在另一个(诸如global.h)文件里,而这个文件在文档中不暴露作用.
[解决办法]
那就用extern吧
[解决办法]
分成两个头文件, 一个给用户, 一个自己内部使用.

读书人网 >C语言

热点推荐