美文网首页
static 和 extern 关键字

static 和 extern 关键字

作者: Sherlock_Jim | 来源:发表于2019-11-14 15:55 被阅读0次

    static 和 extern 是c语言中的两个关键字,是用来修饰变量和函数.

    1.static和extern修饰局部变量的效果.

    a.static修饰局部变量

    1).如果局部变量被static修饰.这个变量就叫做静态变量.

    2).被static修饰的局部变量不再存储在栈区域,而是存储在常量区中.

    3).当第一次执行这个函数的时候,就会将这个静态变量声明在常量区,函数执行完毕之后,这个静态变量也不会被回收.

    后面再去执行这个函数的时候,声明静态变量的这句话就不会再执行了,而是直接略过,直接使用这个静态变量的值,函数

    无论执行多少次,这个静态变量只有1份.

    没有使用static修饰局部变量 使用static修饰局部变量

    b.extern不能修饰局部变量

    2.static和extern修饰全局变量的效果.

    全局变量:函数和全局变量是具有相似性的.

    1)写一个函数,最完整的步骤应该分两步,先写函数的声明,再写函数的实现.

    2)写一个全局变量,最完整的步骤也应该是两步,先写全局变量的声明(只定义全局变量,而不赋值),再写函数的实现(定义全局变量并初始化).

    3)全局变量的声明放在使用这个全局变量之前,全局变量的声明放在使用这个全局变量前后都可以正常取值.

    4)全局变量如果只有声明.没有实现,那么这个时候编译器会自动的帮助我们去实现这个全局变量.自动实现的时候,会将这个全局变量自动初始化为0.

    5)全局变量也可以只有实现,没有声明.但是这个时候,这个全局变量的实现必须要在使用这个全局变量的函数之前.

    6)当我们分模块开发的时候,如果要在模块中声明全局变量,就应该把这个全局变量的声明写在.h文件当中,全局变量的实现要写在.c文件中,并且这个全局变量必须使用static或者extern修饰,这样才能在别的模块访问的到.这里static 和 extern 修饰全局变量的区别是,使用extern修饰,这个模块中的全局变量就可以跨模块访问并取到真正的值,使用static修饰,虽然能访问不报错但是并没有取到真正的值.

    3.static和extern修饰函数的效果.

    1)如果函数被extern修饰,这个函数可以跨模块调用.

    2)如果函数被static修饰,那么这个函数只能在当前函数中调用,但是这个函数不可以跨模块调用,运行Xcode的时候会报错的.

    3)如果函数没有写static或者extern,默认是extern.

    相关文章

      网友评论

          本文标题:static 和 extern 关键字

          本文链接:https://www.haomeiwen.com/subject/ycvrictx.html