解决:invalid application of `sizeof' to incomplete type `({anonymous})'错误

这个错误的原因:

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);

}

这样既保证了数组和长度实时同步,同时文件数据相对独立。代价就是调用函数多压一次栈。

你可能感兴趣的:(Debugging)