问题代码
//a.c文件
char array_test[]={0XED,0X34,0X40,0X34};
//main.c
#define ARRAY_COUNT(array) sizeof(array) / sizeof(array[0])
extern char array_test[];
int main(void)
{
int i = 0;
while(1)
{
for(i = 0; i < ARRAY_COUNT(array_test); i++){}
}
return 0;
}
编译会产生错误:invalid application of 'sizeof' to incomplete type
错误原因
sizeof不能用在extern变量
sizeof 的计算发生在代码编译 的时刻
extern 标注的符号 在链接的时刻解析
所以 sizeof 不知道 这个符号到底占用了多少空间
解决办法
在a.c文件里增加定义
int array_count = sizeof(array_test) / sizeof(array_test[0]);
在main.c引入并使用
extern int array_count;
最终代码
//a.c文件
char array_test[]={0XED,0X34};
int array_count = sizeof(array_test) / sizeof(array_test[0]);
//main.c
extern char array_test[];
extern int array_count;
int main(void)
{
int i=0;
while(1)
{
for(i = 0; i < array_count; i++){}
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。