作者anoymouse (没有昵称)
看板C_and_CPP
标题[问题] sturct/union extern後又定义 没有问题?
时间Tue Jul 30 11:43:04 2019
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; 不就会给记忆体区块了吗?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.216.7.85 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1564458186.A.ADE.html
2F:→ anoymouse: 你贴的是变数的重复宣告而已 并没有重复定义吧07/30 11:52
3F:→ anoymouse: 变数只要没赋值都只是宣告 可是union只要下了就是定义07/30 11:54
4F:→ anoymouse: 还是我理解错误07/30 11:54
5F:→ james732: 看起来跟我问的是同样的问题 XD07/30 12:04
6F:推 boss0405: 你如果第二个定义给不同的初始值就会报error了07/30 14:55
7F:→ anoymouse: 我在之後的main里面有给值 没有error07/30 15:27
8F:推 boss0405: 是给初始值喔,你两个定义都没给初始值是合法的07/30 16:34
9F:→ anoymouse: 就是在定义的同时给初值才会挂?07/30 17:50
10F:→ anoymouse: 可是没给初值不就预设都0吗?07/30 17:50
11F:→ anoymouse: 刚刚试好像不会怎样 等等再试试看07/30 17:57
12F:推 boss0405: 稍微再确认一下,应该是要两个同时都给初始值才会挂07/30 23:18
13F:→ anoymouse: 好 明天会再确认 谢谢 07/30 23:49
※ 编辑: anoymouse (59.115.118.133 台湾), 07/30/2019 23:50:32
14F:→ anoymouse: 我刚刚用devC TDB-GCC 4.9.2试 大概就像你所说的要初始 07/31 09:26
15F:→ anoymouse: 化 才会出现multi-definition 07/31 09:27
16F:→ anoymouse: 但是我单晶片用的编译器就不会有问题。 07/31 09:27
17F:→ anoymouse: 但是如果不在宣告结构变数时就赋值,还是会给结构变数 07/31 10:02
18F:→ anoymouse: 记忆体空间 然後成员内容会是0 07/31 10:02
19F:→ anoymouse: 如果有extern 两个c档的同个结构变数就会是同一个记忆 07/31 10:03
20F:→ anoymouse: 体空间 刚刚试的结果 07/31 10:04