Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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_Function_Static - Fatal编程技术网

C语言中的静态函数

C语言中的静态函数,c,function,static,C,Function,Static,我有一个由*.h文件和*.c文件组成的软件模块。变量和函数声明位于*.h文件中,而函数定义位于*.c文件中。模块内的两个函数是辅助函数,不打算在模块外使用 向模块用户明确此意图的最佳方法是什么 我试图声明函数静态,但在*.h文件中这样做会导致GCC编译器警告函数“声明为静态但从未定义”。即使*.c文件使用#include指令包含*.h文件,但*.h和*.c文件如何被视为不同的翻译单元 是否有一种解决方案不涉及将要进行的函数声明静态以及它们的定义放在*.c文件中?虽然这个解决方案确实有效,但它打破

我有一个由*.h文件和*.c文件组成的软件模块。变量和函数声明位于*.h文件中,而函数定义位于*.c文件中。模块内的两个函数是辅助函数,不打算在模块外使用

向模块用户明确此意图的最佳方法是什么

我试图声明函数
静态
,但在*.h文件中这样做会导致GCC编译器警告函数“声明为静态但从未定义”。即使*.c文件使用
#include
指令包含*.h文件,但*.h和*.c文件如何被视为不同的翻译单元

是否有一种解决方案不涉及将要进行的函数声明
静态
以及它们的定义放在*.c文件中?虽然这个解决方案确实有效,但它打破了我认为在头文件中保存声明和在实现文件中保存定义的良好做法

即使*.c文件使用#include指令包含*.h文件,如何将*.h和*.c文件视为不同的翻译单元

头文件通常也包含在其他源文件中。这就是发出警告的原因

如果编译其他文件(包括头文件),则确实声明了一个未定义的函数


好的做法是在定义静态函数的源文件中声明静态函数,因为这是它们在其中可见的唯一文件。

static
声明不应出现在头文件中(除了
内联的
声明,我现在将忽略它)。如果您想要一个只出现在模块内部的函数,请不要将其放入
.h
文件中。
.h
文件供外部使用。将静态函数放入
.c
文件中。请注意,如果需要,您仍然可以向前声明函数。

在源文件中声明它们定义的静态函数(请同时提供原型),因为这是它们在其中唯一可见的文件


重复:

+1个静态函数仅限于1个翻译单元,它们只能在该单元中声明和定义。