【问题标题】:C Functions: static or remove from headerC 函数:静态或从标题中删除
【发布时间】:2015-04-07 12:09:35
【问题描述】:

[Ansi-C/Eclipse] 出于某种原因,我没有发现任何有用的东西,所以这是我的问题:

我希望 bar() 只能被 foobar.c 内的代码访问

我应该:

  • 将static放在声明和定义的前面

  • bar()的声明从foobar.h中去掉,放到foobar.c里?

有什么区别?这是我的设置:

main.c:

#include "foobar.h"

int main() {
    foo();
}

foobar.h:

#ifndef FOOBAR
#define FOOBAR

void foo();
void bar();     //Move to foobar.c?

#endif

foobar.c:

#include "foobar.h"

void foo() {
    bar();
}
void bar() {    //make this static?
    printf("Hello World");
}

【问题讨论】:

    标签: c function static header


    【解决方案1】:

    是的,你完全正确。你应该两者都做。

    • 创建函数static 将该函数的可见性限制为仅对翻译单元(文件)。不能从任何其他源文件中存在的任何其他函数调用该函数。

    • 您不需要从其他翻译单元调用static 函数,因此您不需要头文件中的原型。如果需要,您可以在 foobar.c 本身内放置一个前向声明。

    【讨论】:

    • 如果无论如何都不能从外部调用它,我为什么要把它设为static?还是有别的称呼?
    • @BMicraft 没有static 链接,如果您知道函数原型,您可以调用该函数。使用static,您不能
    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多