c语言 多文件 连接错误,C中多文件中遇到的一些问题

最近在研究MSP430单片机的编程,开发环境是IAR for

430.昨天调了一个程序,一直没有搞懂怎么出错的,知道今天才解决。总结下经验

我的初衷是想定义一个全局数组,在main.c外的aa.h中声明了一个数组为 int

aa[4];然后在aa.c文件中对数组赋初值。之后在main.c中调用数组aa某些元素的值。结果死活都调不通。错误类型如下:

Error[Pe094]: the size of an array must be greater than

zero

Error[Pe077]: this declaration has no storage class or type

specifier

Error[Pe148]: variable "aa" has already been initialized (at

line 4)

于是我又干脆不用aa.c文件了,直接在aa.h中对数组进行先声明后赋初值的操作。一样的错误还是存在。然后我又直接在声明的同时进行赋值操作,这样错误就没有了。可是非常奇怪的问题是,我写了四个数组,都是在声明的同时赋初值的,但是在main.c中调用数组值时,有两个数组报错有两个数组不报错。晕了菜了!!姑且认为是软件的BUG吧。

晚上参考了一篇博客,觉得说的有道理。编译器在编译阶段对main函数之前的全局变量进行内存分配,对定义的函数生成可执行的代码,并保留该函数的地址以供main函数调用,而赋值语句操作是一句可执行代码,又没有类似函数指针的东西供main函数调用,所以只能放在main函数内部进行顺序执行。 但并不是说在main函数之前就不能对变量进行初始化赋值:可以在定义变量的时候对变量进行初始化赋值。

后来我又采取了另外一种做法就是在aa.h中声明,在主函数里面赋初值,这样所有数组都运行正常了。

结论,在main函数之前最好不要有赋初值的操作,因为一般main都会包含其它头文件,所以在其它文件中,除了函数体内,也不要有可执行的操作。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值