C++ 在头文件中声明静态全局函数
我偶然发现了一段别人写的代码。头文件中有几个声明为静态的全局函数。函数本身在单独的实现文件中定义。好的,静态函数定义在定义函数的转换单元之外是不可见的。如果是这样,在头文件中声明静态函数有什么意义C++ 在头文件中声明静态全局函数,c++,c,C++,C,我偶然发现了一段别人写的代码。头文件中有几个声明为静态的全局函数。函数本身在单独的实现文件中定义。好的,静态函数定义在定义函数的转换单元之外是不可见的。如果是这样,在头文件中声明静态函数有什么意义 // in some header file static void foo(); // in some implementation file static void foo() { .... .... } 那么,声明的函数static仅在定义它们的源文件中可见。尽管在单独的标题中声明它们不是
// in some header file
static void foo();
// in some implementation file
static void foo()
{
....
....
}
那么,声明的函数
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 */ }
但我认为这是一种相当糟糕的方式。更好的解决方案是在实现源文件中的
静态
函数之前对其进行原型化。这是值得研究的:同意,这是一种可怕的函数原型化方法。写代码的家伙不再为我们工作,这是件好事。