我正在用c语言编写一个库,有一些我想可以从其他c文件中调用的函数,还有一些我想保持私有的函数。
我知道可以通过声明static
来将函数隐藏在库文件之外,但是也可以通过仅声明其实现并将其从头文件中删除而实现。
比较:
a.h
//static int private_routine();
int sample();
a.c
/*static*/ int private_routine(){
}
int sample(){
private_routine();
}
哪种做法最好?
答案 0 :(得分:4)
要在单个文件范围内保持函数“私有”或更好,您需要声明它们static
。否则,您可以在其他文件中重新声明相同的功能,并且仍然可以使用它。
例如:
#include "a.h" // without declaration of private_routine()
/*extern*/ int private_routine(); // by default every declaration behaves as with extern keyword, which means function is defined elsewhere
int main()
{
private_routine(); // can use here
return 0;
}
编辑:正如评论中指出的那样,如果不声明static
,则不可能在一个应用程序中多次定义相同名称的函数。如果您定义给定的函数名称N次,则其中至少N-1个必须为static
。