C中静态功能的目的

tak*_*uya 1 c static function

我知道静态函数的名称只在声明它的文件(翻译单元)中可见.这使得封装成为可能.

但是静态函数通常在源文件中声明,因为如果你在头文件中执行它,你最终会得到它的多个实现(我认为这不是我的意图static).

例:

main.c中

#include "functions.h"

int main()
{
    FunctionA();
    FunctionB(); // Can't call regardless of "static".
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

functions.h

#ifndef FUNCTIONS_H
#define FUNCTIONS_H

void FunctionA();

#endif /* FUNCTIONS_H */
Run Code Online (Sandbox Code Playgroud)

functions.c

#include "functions.h"
#include <stdio.h>

static void FunctionB(); // Same whether "static" is used or not.

void FunctionA()
{
    printf("A");
}

void FunctionB()
{
    printf("B");
}
Run Code Online (Sandbox Code Playgroud)

那么什么时候static有用?

Eri*_*hil 5

static说这个功能有内部联系.这意味着它不会与其他文件(翻译单元)中相同标识符的其他用途链接.

例如,假设Tree.c我有一个对Tree结构进行操作的函数,并且我有一些调用的本地子例程UpdateNode在Tree的一部分上运行.进一步假设在List.c,我有一个对List结构进行操作的函数,它还有一些本地子例程,它只UpdateNode用于List结构,而不是Tree结构.

如果我将这两个子例程都留有外部链接,链接器会抱怨多个定义.通过用内部连接标记它们,static避免了这个问题.