a.c
#include<stdio.h>
static int i;
int j;
static void init()
{
printf("init\n");
}
void callme()
{
printf("call me\n");
}
b.c
#include<stdio.h>
extern j;
extern callme();
extern init();
int main()
{
init();
callme();
printf("hello\n");
}
gcc a.c b.c
如果调用callme 没问题
但如果调用init就有问题
所以static函数在外部是不可用的,static 全局变量也是
但是在b.c中如果把a.c include进来的话调用static函数或者全局变量是没有问题的,include相当于b.c也有了a.c的内容,例如:
b.c
#include<stdio.h>
#include "a.c"
//extern j;
//extern callme();
//extern init();
int main()
{
init();
callme();
printf("hello\n");
}
预处理b.c为
gcc -E b.c
# 2 "b.c" 2
# 1 "a.c" 1
static int i;
int j;
static void init()
{
printf("init\n");
}
void callme()
{
printf("call me\n");
}
# 3 "b.c" 2
int main()
{
init();
callme();
printf("hello\n");
}