微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux c 错误 invalid application of 'sizeof' to incomplete type 解决方案

问题代码

//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 举报,一经查实,本站将立刻删除。

相关推荐