在 C 的 header 中使用静态 vs 不包含函数

Using static vs not including function in header in C

我知道在函数声明之前 C 中的 static 关键字只允许声明它的文件使用该函数(编译单元,更准确地说)。我做了一些研究,发现已经回答了有关 , and what it does in detail 的问题,但我认为缺少一个问题:
static 关键字是否向程序添加任何内容,当没有其他函数声明但后面跟着它的定义时?
例如:
main.c

#include "foo.h"

int main () {
    foo();
    return 0;
}

foo.c

void foo2() {
   return ;
}

void foo() {
    return foo2();
}

foo.h

void foo();

如果 foo2() 声明为 static void 会有什么区别?

当我们有一个由多人编写的应用程序时,一个人定义了一个函数 square 来计算数字的数学平方,而另一个人定义了一个函数 square 来绘制一个正方形显示,然后,如果两个函数都没有用 static 定义,则链接程序可能会导致 multiple-definition 错误。当用static定义函数时,不会出现这个multiple-definition错误,因为不会从多个目标文件中导出相同的名称。

如果整个程序中只有一个名字的定义,那么就不会出现这样的multiple-definition错误。但是,如果函数声明为 static,编译器知道它不必导出定义。这意味着,如果编译器将函数“内联”到所有调用它的位置,它就不必为函数的单独实现发出汇编代码。 (内联函数是将其代码合并到调用它的地方的过程,而不是使用调用指令来调用函数。)