Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 - Fatal编程技术网

C 静态声明遵循非静态声明?

C 静态声明遵循非静态声明?,c,C,我知道它的基本原理,但我不熟悉C语言,我无法理解这个主题的答案 在C文件中,我有以下功能: void uart_event_handle(app_uart_evt_t * p_event) { } static void uart_init(void) { } void initialize() { uart_init(); } 静态函数uart\u init()在某个示例程序main.c中,我正试图将其放入另一个c文件(此文件)

我知道它的基本原理,但我不熟悉C语言,我无法理解这个主题的答案

C
文件中,我有以下功能:

void uart_event_handle(app_uart_evt_t * p_event)
{
}
    static void uart_init(void)
    {
    }

    void initialize()
    {
       uart_init();
    }
静态函数
uart\u init()
在某个示例程序
main.c
中,我正试图将其放入另一个c文件(此文件)中


只有在调用时才会发生错误:
uart_init()。否则它将不会发生。

声明一个函数
static
会使它在翻译单元之外不可见。这类似于在类中声明私有字段,因为
static
“隐藏”所有其他文件中的函数

这使您可以在其他文件中定义具有相同名称的新函数,而不必担心名称冲突。同时,
static
使得无法从定义该函数的.c文件外部调用该函数


您的示例提供了一个生成静态函数的用例:
initialize
成为库的“公共”接口的一部分,而
uart\u init
保持隐藏。

您是否试图从另一个
.c
文件调用它?在这种情况下,您必须使用头文件摆脱静态和
extern
函数。不,所有这些代码都在一个C文件中。在我从其他地方使用此文件之前,编译时就发生了错误。如果将
uart_init
放入文件
a.c
并从
b.c
调用它,则需要删除
static
您的注释“我正试图将其放入另一个c文件中”表明存在
uart_init()声明
没有提供非静态声明的
静态
存储类(可能在标题中),而您使用
静态
对函数的定义试图覆盖该声明-未成功。当然,我们没有足够的可见代码来证明这一点。@Curnelious请提供一个。显然,这里没有人能够重现或(甚至理解)你的问题。顺便说一句,LPs并没有对你不尊重,他可能只是有点恼火,我也是。这是一个很好的解释,但我仍然从同一个C文件中调用静态函数。。。我在这里错过了什么?@Curnelious这不应该是个问题。您编译文件的方式一定有问题,因为独立的代码可以很好地编译。好的,我会更深入地检查并接受这一点。谢谢。@Curnelious这真奇怪-您可能需要检查源代码中是否所有大括号都是平衡的,并且没有缺少分号。@Curnelious这也可能意味着头文件中有一个声明,编译器选择忽略它,因为您没有进行调用。您可能希望尝试在启用所有警告的情况下进行编译,并将所有警告视为错误。