可见性(作用域)à编译和链接过程:从对标识符的引用的角度来看,表示从内存作用域向外层作用域“看”时能看见什么
可见性分为全局可见,局部可见,块内可见,编译和链接只谈可见性
生存期à执行过程:对象从生产到结束的这段时间在生存期内,对象保存它的值,直到被更新为止(创建,调用,死亡的过程)。
当程序运行时,先要把全局变量写入数据区
当函数调动时,我们会在栈里面开辟一个栈帧,局部变量才能够存在,局部变量的生存期只有函数被调用才有,函数结束局部变量生存期就结束了,空间被收回
编译器从上到下编译程序。
块是指一对大括号括起来的程序段。块中定义的标识符,作用域在块中。
复合语句是一个块。复合语句中定义的标识符,作用域仅在该复合语句中。
函数也是一个块。
当函数域内定义的变量名称与块内定义的变量名称同名时,编译器的原则是局部优先原则。
凡是在函数外部定义的变量都是全局变量(在.data区),凡是在函数内部定义的变量都是局部变量(在.stack区),(其中,用static关键字修饰的局部变量在.data区)
当全局变量名与局部变量名冲突时,要使用全局变量,可以在其前加::(作用域解析符)
下面以代码为例解释说明:
在代码运行的过程中,首先执行main主程序,并给主程序分配栈桢,给x,y,z并赋值,当要调用mult函数时,给mult函数分配栈桢,执行该部分程序,遇到return时销毁该部分栈桢,继续执行主程序,当在主程序中遇到return时,主程序的栈桢销毁。
其中的x是全局变量,在代码运行过程中自上而下可见,y就不能在sum函数中调用和实现。