【发布时间】:2019-03-31 08:06:55
【问题描述】:
我有这段代码,它有效,但我认为我的做法不正确。我有 3 个文件,main.c、init.c 和 init.h。
init.h 文件看起来像这样(为简单起见,我在此示例中省略了预处理器指令):
void init(int param);
int firstCFG(int param);
int secondCFG(int param);
int thirdCFG(int param);
int fourthCFG(int param);
int fifthCFG(int param);
init.c 文件如下所示:
#include "init.h"
void init(int param){
int cfg1 = firstCFG(1);
int cfg2 = secondCFG(2);
int cfg3 = thirdCFG(3);
int cfg4 = fourtCFG(4);
int cfg5 = fifthCFG(5);
}
int firstCFG(int param){
//do stuff
return stuff;
}
int secondCFG(int param){
//do stuff
return stuff;
}
int thirdCFG(int param){
//do stuff
return stuff;
}
int fourthCFG(int param){
//do stuff
return stuff;
}
int fifthCFG(int param){
//do stuff
return stuff;
}
在我的main.c 文件中,我这样称呼它:
#include "init.h"
int main(int argc, char** argv) {
init(0);
//do stuff....
}
所以基本上,我只调用init.c - init(); 中的一个函数,并且从该文件本身调用该文件中的其他函数。但是由于我在主文件中包含了init.h,所以我可以从 main 调用所有 CFG 函数,但我不想这样做。我希望main.c 文件只看到init() 函数和CFG 函数对于init.c 是私有的。所以我的问题是,这样做的正确方法是什么?
我最初的想法是创建 CFG 函数 static 并且不要在 main.c 中执行 #include "init.h" 所以只有 init() 是外部函数。这也有效,但编译器给了我警告warning: implicit declaration of function ‘init’
【问题讨论】:
-
如果您不想从其他文件中调用
CFG函数,您在init.h中声明它们的原因是什么? -
奇怪的是你问静态函数,但你的函数都不是
static。只需将init.c中的 CFG 函数更改为static int *CFG(…),它们在该编译单元之外将不可见。 (当然这与在init.h中声明它们相矛盾,所以删除它们并只留下void init(int)。)