【问题标题】:C static funtions accesible outside of file?C静态函数可以在文件之外访问吗?
【发布时间】:2025-12-08 21:40:02
【问题描述】:

我用代码块用 main.c 做了一个项目:

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

int main()
{
    printf("%c\n", return_f('f'));
    printf("%c\n", return_f(return_char(71)));
    printf("%d\n", STATIC_INT);

    return 0;
}

还有:

static int STATIC_INT = 14;

static unsigned char return_char(char n){
    return (n/2 + 9);
}

unsigned char return_f(char n){
    return ((n=='f' || n=='F') ? n+1 : 'f');
}

既然我假设static 应该将全局变量和函数限制在他们的文件中,那么它如何允许运行/打印出来:

g
f
14

或者这不是它应该如何工作的?

【问题讨论】:

  • 如果在 Linux 中使用 gcc;试试这个 gcc -E main.c 你应该能找出其余的
  • @JETM 不是重复的 IMO。您链接的问题只是在.h 中声明但仍在.c 中定义。这个问题是关于在.h中定义的。

标签: c


【解决方案1】:

t.h 在实际编译过程发生之前以文本形式包含在内。因此static int STATIC_INT = 14; 是您的main.c 文件的一部分。

真正的问题是您在头文件中声明变量,这几乎总是错误的。

【讨论】:

    【解决方案2】:

    因为你在你的 .c 文件中导入了 t.h,所以它起作用了。

    静态函数不能在文件之外访问。但是当你在 main.c 文件中导入 t.h 时,t.h 中的所有代码都会粘贴到 main.c 中;所以现在你的静态函数属于 main.c !

    【讨论】:

      【解决方案3】:

      您已将t.h 包含在您的main.c 中,因此这些符号与您的main.c 具有相同的单位

      【讨论】: