当前位置:首页 » 编程软件 » 编译器和局部变量区别

编译器和局部变量区别

发布时间: 2023-02-18 23:29:26

㈠ C语言中有哪些存储类型

四种变量存储类型。说明符如下:
auto static extern register
一、auto
auto称为自动变量。

局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进
行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上
从来不用。

二、static
static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。
1. 静态局部变量
它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它
函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。
2. 静态全程变量
Turbo C将大型程序分成若干独立模块文件分别编译, 然后将所有模块
的目标文件连接在一起, 从而提高编译速度, 同时也便于软件的管理和维护。静态
全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与
全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用,
而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。
三、extern
extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要
被其它文件使用。因此, 必须将全程变量通知每一个程序模块文件, 此时可用
extern来说明。
四、register
register称为寄存器变量。

㈡ 操作系统和编译器是怎么识别全局变量和局部

  • 操作系统,只管调度进程,线程编译器根据编程语言的定义,确定变量的作用于,存储类型,生命周期!

  • 定义在函数外部的变量,只有文件静态变量,和外部变量

  • 外部变量,是实实在在的全局变量,不论作用域还是生命周期。

  • 静态变量是局部作用域的,生命周期为,程序的生命周期的变量。

  • 自动变量和函数参数,是局部作用域的生命周期为函数结束的局部变量。

  • 寄存器变量,用register定义,是局部变量;

  • 函数内部的静态变量,语句组内部的静态变量,局部作用域的,生命周期为,程序的生命周期的变量。

  • 静态变量,编译器,可以通过static关键字知道。

  • 自动变量,1)函数内部定义的非静态变量,非寄存器变量是自动变量。

  • 2)函数参数,只能是自动变量,不过也可能定义在寄存器中。

  • 这和调用约定有关,因此不可以用register定义。

  • C语言没有全局变量这种数据类型。

  • 只有4种存储类型,和变量的作用域与生命周期的概念。

  • C++同样没有全局变量这种数据类型。

  • 有另外的两种作用域

  • 1)namespace作用域。

  • 2)类(类型)作用域。

  • C只有全局,文件,函数以及函数内部的语句组,4种逐渐缩小的作用域。

  • 其中内层,对外部作用域,具有完全的遮蔽作用。

  • C++可以通过作用域限定符,区分不同作用域(类,名空间)的名字。

  • 类作用域,可以通过访问权限,限制外部的访问权。

  • 函数作用域(语句组作用域)是封闭的作用域,外部不可以使用函数内部定义的名字。

  • 也不会和外部有命名冲突,只会遮蔽外部的名字。

  • 类作用于,和名空间由于访问方式不同,命名冲突和遮蔽有些特殊。

  • 函数和全局域,基本不会和类作用域有命名冲突,除非类方法内部。

  • 命名空间,可以避免命名冲突。

  • 类继承体系中,则有遮蔽现象。

  • 还有访问权限问题。

  • 实际上,全局变量,有两个概念可以判定

  • 1)作用域(空间)===>由定义和声明位置,和定义和声明使用的关键字决定。

  • 2)生命周期(时间)===>外部和静态变量,的生命周期是全局的,从初始化到程序结束。

  • 函数参数,和函数局部非静态变量,是局部变量

  • 函数参数的传递,是跨函数的(实参,变成形参);

  • 函数内部定义的,局部变量,只有定义处可见,作用域是函数甚至语句组局部,

  • 其中静态变量,生命周期是全局的,非静态是函数甚至语句组的。

  • 全局变量,不是C,C++的概念。

  • 而是,使用编程语言的程序员的概念。

  • 所以,全局变量和C,C++的存储类型,作用域,生命周期等,不是一一对应的概念。

  • 所以,可以有不同的理解。

  • 所以这个概念是很模糊的,不清晰的。

  • 比如局部静态变量,类的静态变量,是否全局变量,就不是可以清晰的说明的。

㈢ 编译器怎么知道是全局变量还是局部变量

这个要细说,能说的很详细,我说一下,比较好理解的你就懂了!
我说之前先打个比方:小区人家,几十户,每家每户都有灯光自己用就是局部的
月亮..全局的.都能用懂了?
按照目前的面向对象来说如Java,C++,C#,Ruby中,由于变量都是封装在类里面的,对别的类不可见,所以已经几乎完全抛弃了全局变量的概念。然而,可以通过把一个类定义为public static,把类成员变量也定义为public static,使该变量在内存中占用固定、唯一的一块空间,来实现全局变量的功能。
说通俗点,你如果想理解,就假如在一个类中,看你定义的变量,位置!类中,方法外面,就属于全局,每个方法都能拿去用..方法里面定义的,就属于局部的,只能他自己用.懂了?
和你一样初学者,不足之处还请指点!

㈣ 程序的局部变量 全局变量 动态申请数据分别存储在什么地方

程序的局部变量全局变量动态申请数据分别存储在栈里。

普通局部变量在堆栈空间上分配,当局部变量的函数被多次调用时,局部变量每次在堆栈上的位置都不相同。还可以在堆上动态分配局部变量(malloc),但是要记住在耗尽堆空间后释放zd。

内存分配上的栈空间时要注意内存的,不能分配太多的内存。如果堆栈中的空间小于请求的空间大小,则系统将显示堆栈溢出并给出相应的异常信息。但堆不同,堆可分配空间很大。

(4)编译器和局部变量区别扩展阅读:

注意事项:

对局部变量进行分类

1.位置:编译器将静态局部变量放在全局存储区域中。数据,因此尽管它是本地的,但它存在于程序的整个生命周期中(它在定义时产生,并随着程序的结束而结束)。

2.访问权限:静态局部变量只能由其作用域内的变量或函数访问。也就是说,尽管它将存在于程序的整个生命周期中,但是其他函数和源文件不能访问它,因为它是静态的。

3.值:如果用户没有初始化静态局部变量,编译器会自动将其赋值为0,每次调用静态局部变量时都会使用最后一次调用后的值。

㈤ 全局变量和局部变量有什么区别是怎么实现的操作系统和编译器是怎么知道的

定义在函数之外的是全局变量,函数内的是局部变量。例如#include
<...>int
a=10,b=15;int
get(void){return
a+b;}void
main(){int
c,d;c=a;d=b;}a,b就是全局变量,可以在任何函数中调用它。c,d是局部变量,只能在main中使用它。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:748
制作脚本网站 发布:2025-10-20 08:17:34 浏览:1010
python中的init方法 发布:2025-10-20 08:17:33 浏览:718
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:878
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:774
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1124
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:349
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:227
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:911
python股票数据获取 发布:2025-10-20 07:39:44 浏览:875