C语言之static和extern

/*
全局变量和局部变量 :
    全局变量 : 
        1,如果没有初始化,默认值为0;
        2,存储在静态区中,随着程序启动而创建,程序结束而释放;
     局部变量 : 
         1,作用域 : 自定义位置起至return或"}"结束;
         2,同一个作用域内,局部变量不可同名;
         3,未初始化的局部变量中,保存着一堆乱码;
         4,变量的调用原则 : 就近原则;
         5,局部变量保存在栈中,作用局结束即被释放;
内部全局变量和外部全局变量 :
    内部全局变量 : 以static关键字修饰,只能够被当前文件访问的全局变量
        1,同一作用域内可定义多个同名的内部全局变量,同名的内部全局变量指向同一块内存空间;
        2,不同文件中的内部全局变量指向不同的内存空间;
     外部全局变量 : 默认情况下,创建的全局变量均为外部全局变量,可其他文件访问的全局变量;
         1, 可同时定义多个同名的外部全局变量,同名的外部全局变量指向同一块内存空间;
         2, 外部全局变量的安全性问题 : 在Xcode升级之后,处于安全性考虑,不在允许在其他文件中,直接访问外部全局变量,但仅仅只是Xcode不支持而已,但其本身,并没有错,
            在终端中,可正常执行.但在Xcode中想要在其他文件中,访问外部全局变量,必须以extern关键字声明,要访问某一个外部全局变量,明确用户知道自己当前操作;
         3,extern的其他用法,在同一个文件中,如果变量定义在变量使用之后,同样可以使用extern进行声明;
static对局部变量的作用 :
    1,会将局部变量创建在静态区中,延长其生命周期,减少局部变量的重复创建和释放,提高程序执行效率;
    2,作用域 : 自定义位置起至文件末尾;
    3,当系统遇到static修饰的局部变量时,首先会检查静态区中是否存在该变量,如果存在,则直接使用,该语句仅仅起到声明的作用,如果不存在,则在静态区中创建该变量;
static和extern对函数的作用 :
    内部函数和外部函数 :
        外部函数 : 默认情况下,创建的函数,即为外部函数,可被其他文件访问;
        内部函数 : 以关键字static修饰,只能够被当前文件访问的函数;当然static也可用于声明一个内部函数;
*/


猜你喜欢

转载自blog.51cto.com/14258683/2388084