学lua必须先学c语言吗 C语言全局变量和局部变量会冲突吗?为什么?
C语言全局变量和局部变量会冲突吗?为什么?
在C语言中,这取决于如何放置全局变量和局部变量。如果将全局变量和局部变量放在一个代码文件中,则会发生冲突。所以不明显,我将编写一个C程序代码,如下图所示:
在这个C程序中,我在main函数外定义了一个全局变量para,并给出一个初始值1。在C程序的主函数中,我定义了一个变量para,它与主函数外的变量同名。
这里,C程序主函数外的变量的生命周期在整个代码中是有效的,而主函数的变量只在主函数中有效。
也就是说,当您在C程序的主函数中操作para变量时,实际上是在主函数中操作变量,而外部para变量的值仍然是1。在这个C程序中,main函数中的para变量隐藏了外部变量para。
因此,学生在学习C语言时,必须注意全局变量被同名局部变量覆盖的问题,还要了解变量的范围和生命周期。
既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?
看了下面兄弟的回信,我们只能说他们一半是对的。
真正的原因是abi(应用程序二进制接口)。
ABI定义了与系统交互的细节,如数据类型、大小和对齐方式;调用约定(控制函数的参数传递方向、可变长度处理、堆栈清理体以及如何接受返回值等);系统调用的编码以及应用程序如何对操作系统进行系统调用系统;以及采用完整ABI操作系统基本格式、程序库等的第二代对象文件。完整的ABI,如英特尔二进制兼容标准(IBCs),允许支持它的操作系统上的程序在支持此ABI的其他操作系统上运行,而无需修改。
其他ABI标准化细节包括C名称修改和同一平台上编译器之间的调用约定,但不包括跨平台兼容性。
至于下面兄弟提到的eax save返回值,这只是X86的ABI规范。在其他CPU架构平台(如PowerPC)中,实现是不同的!--在PowerPC中,返回值存储在R3寄存器中
~],局部值将掩盖全局值。要使用全局变量,需要使用“:”局部变量可以与全局变量同名。在函数中引用此变量时,将使用同名的局部变量而不是全局变量。对于某些编译器,可以在同一个函数中定义多个具有相同名称的局部变量。例如,可以在两个循环中定义具有相同名称的局部变量,并且该局部变量的作用域在该循环中。
学lua必须先学c语言吗 c语言全局变量和局部变量 lua编程语言
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。