file1.c 定义一个u8 RTC_SET[]="The First Time Set RTC Timer";并在file1.h中extern u8 RTC_SET[]; 在file1.c中引用uart1_senddata(RTC_SET,sizeof(RTC_SET));正常 但在file2.c (包含file1.h),此时引用uart1_senddata(RTC_SET,sizeof(RTC_SET));编译通不过;问题出在sizeof(RTC_SET)中, 讨论:要用指针怎么引用,一般在file2.c引用file1.c中的字符串数组是怎么操作的? |
头文件的作用之一就是不暴露其中定义的细节。
头文件中对于如下声明:
extern u8 RTC_SET[];
来说,包含它而未定义它的c文件不知道具体它的定义是如何的(人看起来是数组,编译器其实只知道RTC_SET是个指针),所以你用sizeof也就基本是“错误”的用法。如果指定了其数组大小,那么含有它的c文件就非常明确的知道其为数组和它的值,就可以使用sizeof。
但你又想能够让函数自动获取RTC_SET的字符串大小,这里有个解决方法就是:
uart1_sendData(RTC_SET,strlen(RTC_SET));
优点:不需要特殊记录RTC_SET的大小,可以任意扩展该字符串。程序可维护性、可扩展性较好。
缺点:RTC_SET需要是C格式的字符串,就是以0x00结尾的字符串,这是strlen的限制导致的。再就是strlen比sizeof耗时、耗空间(整个程序只有此一处使用时)都比较多。
strlen参考:
http://en.cppreference.com/w/c/string/byte/strlen
这种方法可以
不行,我试过编译通不过
分析很透彻,现在理解了,赞一个