在 C 语言中,函数默认是全局的。在函数前加“static”关键字可以使一个函数变成静态函数。例如,下面的函数 fun() 是静态的:

static int fun(void)
{
    printf("I am a static funciton.\n");
}

与 C 语言中的全局函数不同,对静态函数的访问仅限于声明它们的文件。因此,当我们想要限制函数的访问时,我们可以将函数定义为静态的。另外,如果我们想要在其他文件中使用相同的函数名,我们也可以将函数定义为静态的。

例如,我们在文件 file.c 中存储了下面的程序:

// in file `file1.c`
#include <stdio.h>

static void fun1()
{
    printf("fun1 called.\n");
}

然后,我们在文件 file2.c 中存储了这样的程序:

// in file `file2.c`
#include <stdio.h>

int main(void)
{
    fun1();

    return 0;
}

接下来,如果我们按照如下的命令编译:

gcc file2.c file1.c

你会得到这样的链接错误:

undefined reference to `fun1'

这是因为 fun1() 函数在 file1.c 中被定义为静态,因而不能在 file2.c 中引用。