问题代码
//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, 0X40, 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;
}