Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在头文件中声明静态全局函数_C++_C - Fatal编程技术网

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 */ }

但我认为这是一种相当糟糕的方式。更好的解决方案是在实现源文件中的
静态
函数之前对其进行原型化。

这是值得研究的:同意,这是一种可怕的函数原型化方法。写代码的家伙不再为我们工作,这是件好事。