1、static关键字的问题
a.h
#pragma once
#include <stdio.h>
static int a = 5;
//a = 10;
void print();
a.c
#include "gloal.h"
#include "stdio.h"
void print()
{
printf("fffff %d\r\n", a);
}
main.c
#include <stdio.h>
#include "gloal.h"
int main(int argc,char *agrv[])
{
a = 10;
printf("a:::%d\r\n", a);
print();
system("pause");
return 0;
}
输出:
a:::10
fffff 5
请按任意键继续. . .
可以看出static的作用域仅仅是在当前文件中,如果.c包含了它,那么作用域就是当前这个.c的文件。
2、重复定义的问题
a.h
int a = 10;
a.c
#include "a.h"
main.c
#include "a.h"
int main()
{
return 0;
}
此时,会报错重复定义。这是因为a作为一个全局变量,在a.c中编译了一次,在main.c中编译了一次。因此编译器会报错重复定义。