C_and_CPP 板


LINE

各位好,小弟新手, 目前在看C++ primier fifth edition, 进度到variable的定义与宣告这个小节, 在讲extern 这个keyword时书中举一个小范例: extern int i; // declares but does not define i int j; // declares and defines i 他解释 To obtain a declaration that is not also a definition, we add extern keyword and may not provide an explicit initializer 请问具体来说c++中initializer所做的事情是什麽呢? 是分配记忆体位置和值给该name吗? 感谢 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.254.198.63 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1588348442.A.31D.html
1F:→ loveme00835: 这样写其实是要方便记忆, extern 和 linkage type 息 05/02 00:41
2F:→ loveme00835: 息相关, 书中已经提到 translation unit 的概念了吗? 05/02 00:41
目前还没看到 但有说之後章节会再重复提到这些概念
3F:推 CoNsTaR: declaration 或 definition 不是由 extern 直接决定 05/02 05:13
4F:→ CoNsTaR: 如果有 assignment 就是 definition,否则为 declaration 05/02 05:13
5F:→ CoNsTaR: declaration 分配记忆体,definition 给值 05/02 05:13
6F:→ CoNsTaR: 这里会说 extern int i 是 declaration 单纯是因为你不 05/02 05:13
7F:→ CoNsTaR: 能在 extern 的同时 assign,既然没有 assignment,所以 05/02 05:13
8F:→ CoNsTaR: 是 declaration 05/02 05:13
9F:→ CoNsTaR: int j 一样是 declaration,因为没有 assignment 05/02 05:13
10F:→ CoNsTaR: int j = i 才算是 definition 05/02 05:13
感谢C大,说得很清楚! ※ 编辑: justhere (111.254.203.171 台湾), 05/02/2020 08:57:19
11F:→ loveme00835: 谁说 extern 就不能 assign 初始值? 讲 extern 如果 05/02 10:21
12F:→ loveme00835: 没有讲 linkage 那就不是正确的理解 05/02 10:21
13F:→ justhere: 所以要先补後面的章节才比较完整吗? 那我先略过这边的 05/02 11:23
14F:→ justhere: 疑问了 感谢以上大大的回答 05/02 11:24
15F:推 ucrxzero: 楼上都错 05/02 11:50
16F:→ loveme00835: 加 extern 预设编译器只会把名称引进来, 多个 extern 05/02 12:36
17F:→ loveme00835: 引进的名称最後都会参考到同一个物件, 而这个物件可 05/02 12:38
18F:→ loveme00835: 以在不同的程式码档 (translation unit) 里定义, 但 05/02 12:40
19F:→ loveme00835: 在编出来的 program 里最多只允许一个. 加了 extern 05/02 12:44
20F:→ loveme00835: 的 declaration 也可以透过明确初始化来提升为书里讲 05/02 12:44
21F:→ loveme00835: 的定义, 也就是决定物件实体所在的位置. extern 只能 05/02 12:47
22F:→ loveme00835: 拿来参考具有 external linkage 的物件, 如果你把 i 05/02 12:48
23F:→ loveme00835: 的 decl 前方加上 static 那不给初始值的 extern 就 05/02 12:50
24F:→ loveme00835: 没用了 (如果每个地方都用 extern 而不去决定实体位 05/02 12:50
25F:→ loveme00835: 置, 最後这个物件就不存在) 05/02 12:51
26F:→ loveme00835: 其实 int j; 算是"宣告"并决定物件的初始値和位置, 05/02 13:07
27F:→ loveme00835: 书里把它说成"定义"是想和函式宣告作个区别 05/02 13:09
28F:→ justhere: 书中在本小节有提到sperate compilation 感觉就是L大所 05/02 13:13
29F:→ loveme00835: 等你学到 class static data member 的时候也可能被 05/02 13:13
30F:→ justhere: 说的translation unit? 05/02 13:13
31F:→ loveme00835: 书里的这种分类给混淆 05/02 13:13
32F:→ loveme00835: 对喔, 语言本身是设计可以分开编译再连结执行的, 这 05/02 13:14
33F:→ loveme00835: 时候物件的实体放在哪里的这观念就很重要, extern 基 05/02 13:15
34F:→ loveme00835: 本上就是设计来跨 translation unit 参考 05/02 13:15
35F:→ protoss: 我一直以为int j;其实已经算定义了? 05/02 19:08
36F:→ stucode: 根据标准 int j; 是定义没错。 05/02 19:47
37F:→ stucode: https://eel.is/c++draft/basic.def#2 05/02 19:47
38F:→ loveme00835: 严格来说不是语法决定定义与否, 而是由情境来决定 05/02 20:26
39F:→ loveme00835: 宣告就是宣告, 但某些情境下宣告即定义 05/02 20:27
40F:→ eye5002003: 其实include就是将标头档的内容给复制贴上,明白这点 05/07 12:27
41F:→ eye5002003: 就可以想通很多问题了,也很自然的理解extern了 05/07 12:28







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP