extern使用sizeof

在拥有多个文件的C项目之中,例如有三个文件,一个头文件palyer.h, 一个头文件的源文件 player.c ,一个 main.c ,在 player.c 中定义一个结构数组,然后,在 main.c 中使用sizeof(数组)/sizeof(元素)来获取其大小。但是, 如果该语句在main.c中使用会发生 “nvalid application of 'sizeof' to incomplete type 'struct player[]'” 错误,翻译过来就是 “  将'sizeof'应用到不完整类型'struct player[]'无效 ” ,原因是匿名长度的数组声明在有初始化值定义时会有编译器根据初始化列表确定其长度。但是对与extern文件外部的数组,只有链接时才能确定其大小,但sizeof运算符需要在编译时就确定对象的大小,于是错误就出现了。(player.c --> player.i--> player.s --> player.o --> 和其它文件进行链接,然后完成。)

那么,我的方法,是在 player.c 中建立一个变量,将 sizeof(数组)/sizeof(元素) 赋值给变量,然后再 main.c 中申明外部变量extren n就可以正确的使用该值了。原因是在同一文件下,在链接之前,既就已经确定了其大小(不知道如何处理)

 

extern void是一个在C语言中用来声明函数的关键字。它表示该函数是在其他地方定义的,而在当前的代码文件中只是声明。这样可以在当前的代码文件中使用该函数,而不需要知道具体的实现细节。extern void的作用是为了在编译阶段能够正确地引用到函数的定义。在声明函数时,有和没有extern的效果是一样的,因此可以省略extern关键字。对于变量而言,有和没有extern是有区别的,extern关键字用来声明一个变量是在其他地方定义的。至于void关键字,它表示该函数没有返回值。因此,extern void表示声明了一个没有返回值的函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [void,externsizeof 关键字分析](https://blog.csdn.net/qq_36016407/article/details/54915956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [从汇编看c++中extern关键字的使用](https://download.csdn.net/download/weixin_38688403/13996724)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【014 关键字】一文彻底搞懂extern用法](https://blog.csdn.net/qq_41709234/article/details/122984203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值