我遇到了别人写的一段代码。在头文件中声明为静态的几个全局函数。函数本身在单独的实现文件中定义。 AFAIK,静态函数定义在定义函数的转换单元外部不可见。如果是这样,在头文件中声明静态函数有什么意义呢?
// in some header file
static void foo();
// in some implementation file
static void foo()
{
....
....
}
答案 0 :(得分:6)
嗯,声明static
的函数只能在它们定义的源文件中看到。虽然在单独的头文件中声明它们并不是一个好主意。我也看过一些开发人员已经做过这种情况的案例。他们这样做是为了按顺序排列它们,以便他们可以从另一个函数调用一个函数。这就是我的意思:
/* In header */
static void plus(int);
static void minus(int);
static void multiply(int);
/* In source file */
static void minus(int v)
{
/* So plus can be called in minus without having to define it
* before minus */
plus();
}
static void plus(int v) { /* code */ }
但恕我直言,这是一个非常灾难性的方法。更好的解决方案是在实现源文件之前对static
函数进行原型设计。