c/c++中static关键字和extern关键字

来源:互联网 发布:word2010表格数据求和 编辑:程序博客网 时间:2024/06/06 05:52
  1. 在c语言中的static关键字
    • static修饰局部变量
      改变该变量的生命周期。该变量只会被初始化一次。对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在数据区,其生命周期一直持续到整个程序执行结束。
    • static修饰全局变量
      改变该变量的链接属性,也就是只能在本文件中使用该变量。
    • static修饰函数
      改变该函数的链接属性。
  2. 在c++中的static关键字
    • static修饰普通变量
      和c语言相同
    • static修饰类的成员变量
      (1) 表示该变量是类的所有成员共有的,不再单独属于任何一个成员。
      (2) 用sizeof操作符进行运算时,static修饰的变量不会被包括在内。
      (3) static修饰的变量需要在类外进行定义。
      (4) 在类外可以用类名加域解析符访问
    • static修饰普通函数
      和c语言相同
    • static修饰类的成员函数
      (1) 不再拥有隐藏的this指针
      (2) 不再可以调用类的普通成员变量
      (3) 不再可以调用类的普通成员函数
      (4) 在类外可以用类名加域解析符访问
  3. c语言中的extern关键字
    当一个项目有多个文件时,在一个文件中定义的变量若想在另一个变量中使用,需要使用extern关键字进行声明。在这里要注意extern声明的位置对其作用域也有关系,如果是在main函数中进行声明的,则只能在main函数中调用,在其它函数中不能调用。其实要调用其它文件中的函数和变量,只需把该文件用#include包含进来即可,为啥要用extern?因为用extern会加速程序的编译过程,这样能节省时间。
  4. c++中的extern关键字
    在c++中,extern除了拥有在c语言中的作用,还有其他作用。在C++中若想调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。主要原因是C++和C程序编译完成后在目标代码中命名规则不同,用此来解决名字匹配的问题。