1)XX.h和XX.c。当在XX.h中定义static变量时,即使XX.c include XX.h,XX.h中也无法看到定义的static变量。

2)静态局部变量特点
静态局部变量属于静态存储方式,它具有以下特点:

 

(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。

 

(2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。

 

(3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋值。数值型变量自动赋初值0,字符型变量赋空字符。

 

(4)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源文件的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

 

3)重复声明不会出现问题。例如#include同一个声明多次

4)命名空间:

以下代码编译无法通过

 

#include <stdlib.h>

#include <stdio.h>

#define REC 1

#define POLAR 2

int main(int argc, char *argv[]) {

int REC;

printf("%d %d\n",REC,POLAR);

return EXIT_SUCCESS;

}

以下代码可以
#include <stdlib.h>
#include <stdio.h>
enum _type {REC=0,POLAR};
int main(int argc, char *argv[]) {
int REC;
printf("%d %d\n",REC,POLAR);
return EXIT_SUCCESS;
}