这个错误的原因:
sizeof不能用在extern变量,
sizeof 的计算发生在代码编译 的时刻。。
extern 标注的符号 在链接的时刻解析。。。
所以 sizeof 不知道 这个符号到底占用了多少空间。
发生错误的程序是这样的:
extern int (*unpackfn[])(int,unsigned char*);
#define NELEMS(array) (sizeof(array)/sizeof(array[0]))
...
NELEMS(unpackfn);
...
IAR给的错误提示为:Error[Pe070]: incomplete type is not allowed
我把程序移植到了dev-c++上,错误为invalid application of `sizeof' to incomplete type `({anonymous})'
结论:
1.IAR给的错误提示不如GCC的具体,嵌入式编程遇到的问题,可以试着移植到PC上,debug相对容易
2.sizeof不能用在extern变量
为此我做了一个函数
int unpackfn_len(void)
{
return NELEMS(unpackfn);
}
这样既保证了数组和长度实时同步,同时文件数据相对独立。代价就是调用函数多压一次栈。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)