声明一个静态函数使其私有化还是只在.c文件中声明并从头文件中排除它是更好的选择吗?

时间:2019-06-03 13:02:15

标签: c static-functions

我正在用c语言编写一个库,有一些我想可以从其他c文件中调用的函数,还有一些我想保持私有的函数。

我知道可以通过声明static来将函数隐藏在库文件之外,但是也可以通过仅声明其实现并将其从头文件中删除而实现。

比较:

a.h

//static int private_routine();
int sample();


a.c

/*static*/ int private_routine(){

}
int sample(){
  private_routine();
}

哪种做法最好?

1 个答案:

答案 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