[问题] sturct/union extern后又定义 没有问题?

楼主: anoymouse (没有暱称)   2019-07-30 11:43:04
win10
compiler: Microchip xc8
In the header File:
typedef union
{
uint8_t Bytes[4];
uint32_t Word;
}BYTES_TO_WORD;
extern BYTES_TO_WORD MyBytes;
In the 'C' File with the declairation in it
#include "commonheaderfile.h"
BYTES_TO_WORD MyBytes;
in other 'C' files
#include "commonheaderfile.h"
MyBytes.Word=123445677;
上述这样是正常运作,结果我不小心在other 'C' file也下了BYTES_TO_WORD MyBytes;
编译还是过,运作也没问题,奇怪这样不是重复定义?
BYTES_TO_WORD MyBytes; 不就会给内存区块了吗?
谢谢
作者: KaryuuIssen (一闪)   2019-07-30 11:46:00
楼主: anoymouse (没有暱称)   2019-07-30 11:52:00
你贴的是变量的重复宣告而已 并没有重复定义吧变量只要没赋值都只是宣告 可是union只要下了就是定义还是我理解错误
作者: james732 (好人超)   2019-07-30 12:04:00
看起来跟我问的是同样的问题 XD
作者: boss0405 (boss)   2019-07-30 14:55:00
你如果第二个定义给不同的初始值就会报error了
楼主: anoymouse (没有暱称)   2019-07-30 15:27:00
我在之后的main里面有给值 没有error
作者: boss0405 (boss)   2019-07-30 16:34:00
是给初始值喔,你两个定义都没给初始值是合法的
楼主: anoymouse (没有暱称)   2019-07-30 17:50:00
就是在定义的同时给初值才会挂?可是没给初值不就默认都0吗?刚刚试好像不会怎样 等等再试试看
作者: boss0405 (boss)   2019-07-30 23:18:00
稍微再确认一下,应该是要两个同时都给初始值才会挂
楼主: anoymouse (没有暱称)   2019-07-30 23:49:00
好 明天会再确认 谢谢我刚刚用devC TDB-GCC 4.9.2试 大概就像你所说的要初始化 才会出现multi-definition但是我单芯片用的编译器就不会有问题。但是如果不在宣告结构变量时就赋值,还是会给结构变量内存空间 然后成员内容会是0如果有extern 两个c档的同个结构变量就会是同一个内存空间 刚刚试的结果

Links booklink

Contact Us: admin [ a t ] ucptt.com