1、問題場景: 文件<a1.c>中定義了一個(gè)常量數(shù)組,這個(gè)數(shù)組的內(nèi)容經(jīng)常需要修改,因此長度會(huì)有變動(dòng): const u8 buf[]={1,2,3,4,5,7} 2、問題描述: (1)文件<a2.c>需要引用這個(gè)常量,extern const u8 buf[?];引用時(shí)的長度怎么確定? 用宏定義 #define len sizeof(buf)/sizeof(u8) extern const u8 buf[len] 編譯不能通過。為什么不能通過,是否有其他解決方案? 補(bǔ)充描述 buf的長度沒法確定; ①空著不行,在其他文件計(jì)算sizeof(buf)/sizeof(u8)時(shí),編譯報(bào)不知道buf長度錯(cuò)誤;看來編譯器是根據(jù)extern聲明判斷長度; ②用宏不行,宏計(jì)算的結(jié)果放到聲明里,編譯器也會(huì)報(bào)錯(cuò); ③用常量定義長度,編譯器也報(bào)錯(cuò); 3、解決方法一: (1)將#define len sizeof(buf)/sizeof(u8) 修改為 #define len sizeof(buf)/sizeof(buf[0]) (2)在同一個(gè)文件中,先定義 const u8 buf[]={1,2,3,4,5,7} 接著定義 const u8 Buf_Lenth=sizeof(buf)/sizeof(buf[0]); (3)在頭文件中, 用extern聲明, extern const u8 buf[]; (4)在其他文件中,需要用到數(shù)組長度時(shí),用Buf_Lenth;編譯就可以通過; 注意:在其他文件中使用時(shí),不用算sizeof(buf)/sizeof(buf[0] ,會(huì)報(bào)錯(cuò)未定義buf大小。
|
|