请教:extern是否重新分配地址,
同事离职,接手其工作,C文件有个接收数组,1:
主程序 定义: unsigned char receive_sbuf ;
子程序 定义extern unsigned char receive_sbuf ;
此时,该系统与上位机通讯正常。
2:
后来我将所有的函数整合成一个大函数,因为疏忽,在大函数中同时有
unsigned char receive_sbuf ;
extern unsigned char receive_sbuf ;
两个定义,编译器不报警,系统正常工作。
3:
后来将 extern unsigned char receive_sbuf ; 删掉,此时通讯不正常。
最重要的是:在接收数据时,不限制接收字节数量,并且有if(receive_sbuf >0x12)这样的判断条件,在1、2情况下正常在3的情况下就不正常。
编译环境 :keil 4.72.9.0 单片机stc12c5a60s2 对于一般的编译器,全局和局部同名的话,在函数内部会先引用局部变量。 楼上说的对,对于extern关键字,只是作为声明这个变量是别的文件中定义的,并没有非配内存给它.同时,你在你在子函数中的同名变量,默认会覆盖掉extern修饰的变量,所以不会报错.如果是全局作用域的变量你也弄同样的名字,那估计会出现命名错误.你试试看 不会,这个标志只告诉编译器这个东西在外面定义,这里声明一下,需要将就着用的时候去外面找,好一点的编译器还会帮你去核对此处声明和外部定义的类型,有的编译则是是声明成什么样就当什么用~ 你的程序会完全不按照你的设想跑,数组越界访问会篡改其他变量的值,这是个大灾难。跟删不删除etern没关 学习了{:handshake:}{:handshake:}
页:
[1]