Board logo

标题: 一个简单的c语言问题,请各位不吝赐教。 [打印本页]

作者: waitforgod    时间: 2005-8-1 11:28     标题: 一个简单的c语言问题,请各位不吝赐教。

邵贝贝的《单片机嵌入式应用的在线开发方法》中说道:由于程序是固化在rom里的,而不是下载到ram中的,除非在应用程序运行后向ram中下载什么,ram中的内容是随机的。这就要求c语言开发嵌入式应用程序时不使用初始化变量。
例不能使用: int a=5; function{ a+=3;}
要写城   :  int a; function{a=5;a+=3;}
但是两种用法我都试过,都可以。怎么理解这段话?
作者: strongchen    时间: 2005-8-1 11:43

RAM中的变量分为全局变量和局部变量。对于全局变量,应该没什么问题。但对于局部变量,若采用第一种形式,而在int a=5和function{a+=3}之间运行过别的函数或程序(即使程序中它们中间没有别的代码,也可能运行中断程序等),则不能保证a的初始值。所以最好采用第二种形式。
作者: waitforgod    时间: 2005-8-1 20:40

费解ing,“对于全局变量,应该没什么问题。但对于局部变量,若采用第一种形式,……“
因该对局部变量没问题吧?函数不可重入,不就是因为全局变量被修改吗?
作者: strongchen    时间: 2005-8-2 11:12

全局变量在RAM中占一个固定的地址,当函数调用某个全局变量时,程序员应该知道此时它的数值所代表的含义,而不会是一个随机的数。全局变量可以用来传递参数。
但局部变量并没有固定的地址,它分配在堆栈中,只是调用某个函数时,才临时分配一个地址。当函数调用结束时,堆栈空间就会释放。局部变量不能用于传递参数。
作者: coleflyer    时间: 2005-8-2 11:34

例不能使用: int a=5; function{ a+=3;}
要写城 : int a; function{a=5;a+=3;}
这个例子应该就是针对全局变量来说的吧,局部变量肯定是定义在函数内部的啊
作者: strongchen    时间: 2005-8-2 11:43

可能我第一个帖子的描述不是很准确。但不管怎样,只要各位能了解全局变量和局部变量的具体物理规程,在编程中就能自如地运用,也就不必拘泥于某些书本上的句子了。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0