sizeof extern数组

sizeof 的计算发生在代码编译 的时刻。。

extern 标注的符号 在链接的时刻解析。。。 

所以 sizeof 不知道 这个符号到底占用了多少空间。

原因在于没有声明长度的数组是个不完整类型。
匿名长度的数组声明在有初始化值定义时会有编译器根据初始化列表确定其长度。但是对与extern文件外部的数组,只有链接时才能确定其大小(同一文件的extern我等会测试),但sizeof运算符需要在编译时就确定对象的大小,于是错误就出现了。
解决办法就是声明的时候给它个长度。


sizeof cannot be used with function types, incomplete types, or bit-field lvalues.

When applied to an operand that has structure or union type, the result is the total number of bytes in such an object, including internal and trailing padding.

Incomplete Types

An incomplete type is a type that describes an identifier but lacks information needed to determine the size of the identifier. An "incomplete type" can be:

  • A structure type whose members you have not yet specified.

  • A union type whose members you have not yet specified.

  • An array type whose dimension you have not yet specified.

The void type is an incomplete type that cannot be completed. To complete an incomplete type, specify the missing information. The following examples show how to create and complete the incomplete types.

  • To create an incomplete structure type, declare a structure type without specifying its members. In this example, the ps pointer points to an incomplete structure type called student.

    struct student *ps;
    
  • To complete an incomplete structure type, declare the same structure type later in the same scope with its members specified, as in

    struct student
    {
        int num;
    }                   /* student structure now completed */
    
  • To create an incomplete array type, declare an array type without specifying its repetition count. For example:

    char a[];  /* a has incomplete type */
    
  • To complete an incomplete array type, declare the same name later in the same scope with its repetition count specified, as in

    char a[25]; /* a now has complete type */

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值