由编译器指定数组长度带来的一个问题

【目的】

   在main.c文件中使用在header.c文件中定义在header.h中声明的由编译器指定长度的数组

 

【代码】

<header.c> 

 1 #include "arrayTest.h"
 2 
 3 
 4 
 5 unsigned char array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
 6 
 7 
 8 
 9 
10 void print_arraySize0(void)
11 {
12     printf("sizeof(array[])= %d\n", sizeof(array));
13 }

 

<header.h>

 1 #include <stdio.h>
 2 
 3 #ifndef __ARRAYTEST_H__ 
 4 #define __ARRAYTEST_H__ 
 5 
 6 
 7 
 8 extern unsigned char array[];
 9 
10 
11 void print_arraySize0(void); 
12 
13 
14 #endif

 

<main.c>

 1 #include "arrayTest.h"
 2 
 3 
 4 
 5 
 6 void print_arraySize(void)
 7 {
 8 #if 0
 9     printf("sizeof(array[])= %d\n", sizeof(array));
10 #endif
11 }
12 
13 
14 void print_array(unsigned char *array)
15 {
16     char i =0;
17     
18     for(; i <9; i++)
19     {
20         printf("sizeof(array[%d])= %d\n", i +1, array[i]);
21     }
22 }
23 
24 
25 int main(void)
26 {
27 
28     print_arraySize0();
29 
30     print_array(array);
31     
32     
33     while(1);
34     return 0;
35 }

 

【编译运行环境】

  C-Free5.0, KEIL5.20

 

【编译运行结果】

  > 打开函数 print_arraySize 内的打印功能,则报错  main.cpp:7: error: invalid application of `sizeof' to incomplete type `unsigned char[]' 

  > 打开函数 print_arraySize 内的打印功能,则运行结果为

   

 

【分析及结论】

  > 由于定义的数组大小是由编译器分配的,在文件<header.c>中使用  sizeof(array)  是OK的,在文件<main.c>中使用 sizeof(array) 就报错,因为文件<main.c>中使用 sizeof(array) 的数组是文件<header.h> 声明的 extern unsigned char array[],这就让编译其误认为此数组未指定大小,导致使用 sizeof(array)  报错

  > 不论是在源文件还是头文件中,数组大小由编译器分配,数组的内容都能正确访问,就是如 sizeof 等部分函数功能无法使用

 

转载于:https://www.cnblogs.com/skullboyer/p/8639067.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值