关键字:static和extern(在C和C++中)

来源:互联网 发布:php抽奖系统 编辑:程序博客网 时间:2024/06/05 18:35

static
在C语言中:

1.修饰变量;  (1)全局变量:     改变了连接属性,把外部链接属性改为了内部链接属性。即改变了变量的作用域,这个全局变量只能在本文件中访问,不能在其他文件中访问,即便是extern外部声明也不可以。  (2)局部变量:     改变局部变量的生命周期,使局部变量具有了记忆功能,只执行一次,直到程序运行结束以后才会释放。2.修饰函数。  改变了链接属性,把外部链接属性改为了内部链接属性。则这个函数只能在本文件中使用,不能被其他文件调用。

在C++中:

 1.修饰变量:  (1)普通成员变量:  (2)静态成员变量: 2.修饰函数:  (1)普通成员函数  (2)静态成员函数

这里写图片描述

这里写图片描述

extern
extern被称为是最会戴帽子的关键字
extern,是外面的、外来的意思。

在C语言中:

   extern可以置于变量或函数前,以表明变量或函数的定义在别的文件中,   下面代码用到的这些变量或函数是外来的,不是本文件定义的,提示链接器遇到此变量和函数在其他模块中解析/绑定此标识符。

在C++中:

 用于指示CC++函数的调用规范。 例如:在C++中调用C库函数,就需要在C++程序中用 extern"C" 声明要引用的函数,这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。  主要原因是:CC++程序编译完成后在目标代码中命名规则不同,用此来解决名字匹配的问题。

C和C++函数在链接时,给函数换名字的命名规则
C函数:
C函数名在链接时,会在函数名前加一个下划线。
例如:int Add(int left,int right);
链接的时候会把Add变成_Add;
C++函数
C++函数名在链接时,会把函数名变为一串“有规则”的符号。
例如:int Add(int left,int right);
链接的时候会把Add变成 ?Add@@YAHHH@z
由此也可知:C语言不支持函数重载,C++语言支持函数重载,C不支持函数重载,因为C程序在链接的时候会把程序中出现的所有Add都改为_Add.编译器就会不知道该调用那个。
【函数重载的条件:同一个作用域,函数名相同,参数列表不同(参数列表不同可表现为:个数方面、类型方面、次序方面)】