系列文章目录
前言
一般来说有三个地方可以定义变量:
在函数或一个代码块内部声明的变量,称为局部变量。
在函数参数的定义中声明的变量,称为形式参数。
在所有函数外部声明的变量,称为全局变量。
作用域是程序的一个区域,变量的作用域可以分为以下几种:
局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。局部变量在函数每次被调用时被创建,在函数执行完后被销毁。
全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。
块作用域:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建,在代码块执行完后被销毁。
类作用域:在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。类作用域变量的生命周期与类的生命周期相同。
注意:如果在内部作用域中声明的变量与外部作用域中的变量同名,则内部作用域中的变量将覆盖外部作用域中的变量。
一、extern的全局变量
1.1 用法
不同的文件共用一个变量,且不改变定义变量的文件位置。
- 一个c文件需要调用另一个c文件里的变量或者函数,而不能从.h文件中调用变量,头文件的引用只能使用头文件.h文件内变量和函数:
例如:a.h 在a.cpp定义了一个int gogal全局变量,就算b.h引用该头文件,也不能够使用gogal全局变量 不建议从.h定义全局变量,因为该头文件可能会被多次引用,造成重复定义全局变量,编译报错;
- extern int a = 5与in a = 5意义是一样的,都是定义。而extern int a;是声明。但会产生一条警告。
- 对于函数而言,和引用变量是一样的,如果需要调用其他.c文件中的函数,在文件中的函数声明前加extern即可,不加extern而直接声明函数也可以,因为声明全局函数默认前面带有extern。
1.2 代码示例
目录结构
test.h
test.cpp
test2.h
test2.cpp
main.cpp
运行截图:
二、static的静态全局变量
1.1 用法
如果不想让其他.c文件引用本文件中的变量,使用static即可;
类似于c++中类的私有成员变量,只能通过类对象内部去修改,不能够通过外接直接修改变量值;
1.2 代码示例
test.h
test.cpp
main.cpp
运行截图:
三、拓展作用域
一般来说有三个地方可以定义变量:
在函数或一个代码块内部声明的变量,称为局部变量
。
在函数参数的定义中声明的变量,称为形式参数
。
在所有函数外部声明的变量,称为全局变量
。
作用域是程序的一个区域,变量的作用域可以分为以下几种:
-
局部作用域
:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。局部变量在函数每次被调用时被创建,在函数执行完后被销毁。 -
全局作用域
:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。 -
块作用域
:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建,在代码块执行完后被销毁。 -
类作用域
:在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。类作用域变量的生命周期与类的生命周期相同。
注意:如果在内部作用域中声明的变量与外部作用域中的变量同名,则内部作用域中的变量将覆盖外部作用域中的变量。
总结
- 了解作用域,方便以后创建自己想要的变量和函数;
- 了解全局变量的创建;
- 了解关键字extern的使用。