我使用代码块与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
或者这不是它应该如何工作的?
答案 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
的单位相同