我理解 static
关键字用于创建对翻译单元(源文件)“私有(private)”的函数或变量。
但是,据我所知,为了确保无法从声明它的 .c
文件外部访问特定函数或变量,我可以简单地不在对应的.h
文件中声明。
例如:
f.c
void public_func() {
// ...
}
void private_func() {
// ...
}
f.h
void public_func();
// no declaration of private_func
那么为什么我还要将 private_func
声明为 static
?这仅仅是一个约定,还是比不在 .h
文件中声明它具有技术优势?
最佳答案
问题是编译器在“翻译单元”的基础上工作,这意味着一个 .c 文件及其包含的所有 .h 文件。因此,传统上它无法检测整个项目中的命名冲突。
因此,如果您不将其设为static
,则该函数默认具有“外部链接”。这意味着如果有一个函数 private_func
并且同一项目中的另一个翻译单元使用相同的名称,那么您在链接和链接器错误期间会发生命名空间冲突。
这也是一个正确性问题——无论是有意还是无意,私有(private)函数/变量都不应从外部访问。
关于c - 为什么我不能将 "private"函数声明为静态的,而我根本不能将它放在头文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55537604/