在头文件中声明静态全局函数

时间:2012-03-21 10:59:57

标签: c++ c

我遇到了别人写的一段代码。在头文件中声明为静态的几个全局函数。函数本身在单独的实现文件中定义。 AFAIK,静态函数定义在定义函数的转换单元外部不可见。如果是这样,在头文件中声明静态函数有什么意义呢?

// in some header file
static void foo();


// in some implementation file
static void foo()
{
....
....
}

1 个答案:

答案 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函数进行原型设计。