文件外部是否可以使用C静态功能?

时间:2018-10-05 11:39:53

标签: c

我使用代码块与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;
}

还有t.h:

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

它起作用是因为您在.c文件中导入了t.h。

在文件外部无法使用静态功能。但是,当您将t.h导入main.c文件时,t.h中的所有代码都将粘贴到main.c中。所以现在您的静态函数属于main.c!

答案 2 :(得分:0)

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