YOLO 板


LINE

※ [本文转录自 Gossiping 看板 #1SFuJUH6 ] 作者: jserv (松鼠) 看板: Gossiping 标题: Re: [问卦] C语言最难的部分是哪一个 时间: Thu Jan 17 03:24:08 2019 ※ 引述《yuponkimo (皇甫尊)》之铭言: : 内葛, (学期即将结束,我终於有空上来发废文了) 葛,是豆科多年生草本植物,茎长二、三丈,缠绕他物上,花紫红色。用途多样, 茎可编篮做绳,纤维可织葛布。根可提制淀粉,又供药用。葛根,能解饥退热, 治高血压、颈项强痛、冠心病等。 《诗经.国风.周南.葛覃》开头写道「葛之覃兮,施于中谷,维叶萋萋」,意思是 长长的葛藤生长,蔓延到谷中,伴随着茂盛的叶子。兄台用「葛」来点题,诉说 C 语言近 50 年历久弥新的发展,实在高竿啊! : 我自己觉得是Linked list啦, : 射来射去的豆页真的疼, : 花了好长时间才写出一题来, : 好好的structure为什麽要再加上指到自己的指标呢? 这里又用「豆」提醒大家,「葛」属於豆科,用心良苦。 Linux 核心之父 Linus Torvalds 在 TED 2016 的访谈 [1] 中,用 linked list 程式码 作为解说「程式设计的品味」,在有限的访谈中,Linus 不去解释程式码的运作,而仅用 程式码的长度变化,让会众体验到「一个目的有着多条路径,但我们该如何取舍呢?」, 我想,这也是 C 语言程式设计中,最为困难的地方,也就是「品味」。 考虑以下自给定的 linked list 中删去特定节点的程式码: (占用 10 行) void remove_list_node(List *list, Node *target) { Node *prev = NULL; Node *current = list->head; while (current != target) { prev = current; current = current->next; } if (!prev) list->head = target->next; else prev->next = target->next; } 但 Linus 说,其实可改写为以下功能一致,但更有「品味」的实作: (仅用 4 行) void remove_list_node(List *list, Node *target) { Node **indirect = &list->head; while (*indirect != target) indirect = &(*indirect)->next; *indirect = target->next; } 上述程式码从「要更新什麽位置的资料」思考,无论是 head 或者非 head,更新的是 同一类型的资料,不用特别操作,自然省下额外的处理。 也许你会好奇,那麽新增节点的程式码是否也可运用类似技巧呢?当然可以!请见以下: void insert_list_node(List **head, int val) { while (*head) { head = &((*head)->next); } *head = calloc(1, sizeof(List)); (*head)->val = val; } 要掌握这样的「品味」之前,务必先征服 C 罩杯。依据 Wikipedia 的解说 [2]: > 根据制造商的不同,版型可能有所不同因而穿着效果上有所差异。 > 罩杯尺寸大致是下列公式换算可得知:罩杯尺寸 = 上胸围 - 下胸围 上述「上围」和「下围」就对应到 C 语言规格的 data type,而在 C 语言中基础运算 型态和对应修饰字均有资料范围规范,千万不要小看数值范围对程式设计的影响,倾家 荡产或国破家亡都有可能。 1996 年 6 月 4 日,在风和日丽的法属盖亚那太空中心 (法文: Centre Spatial Guyanais),欧洲太空总署发射了一艘名为 Ariane 5 的火箭,预计运送 4 颗太阳风观察 卫星到轨道。火箭本身加上载运的人造卫星及科学仪器值 USD 7.5 billion (台币约2250 亿)。Ariane 名称来源於神话人物阿丽雅杜妮 (Ariadne) 的法语拼写。 在当时,Ariane 系列火箭承包了全球商业卫星的发射约 50% 的业务量,而人们万万没想 到,Ariane 5 发射後 37 秒,升空到 4 公里处,火箭偏离预定飞行轨迹,解体并爆炸, 2 名法国士兵当场死亡。 失事调查报告指出:水平加速侦测仪传了一个 64-bit 浮点数给电脑,但飞行电脑用 16-bit 有号整数来接受这个浮点数,很不巧传来的数字大於 32767,发生溢位 (Overflow) 例外,这样的软体设计缺失很常见,但对 Ariane 5 来说,下场竟是火箭的推进向量喷嘴 忽然朝某个方向转到底,在高速偏航後,最终火箭解体。 开发 Ariane 5 火箭的软体工程师在前一代 Ariane 4 中,小心翼翼地确认数值分布, 确保水平速率的数值绝不会超过 16-bit 表达范围以外。这些工程师在 Ariane 5 系统 沿用这段程式码,却没有检查前述假设是否符合新的设计。 上述 Ariane 5 火箭事故对应的展示用 C 语言程式如下: void show_info(double d, int16_t n) { n = (int16_t) d; printf("d = %f, n = %d \n", d, n); } int main() { double d1 = 32767.0, d2 = 32768.0; int16_t n = 0; show_info(d1, n); show_info(d2, n); return(0); } 第 1 个输出是 n = 32767; 第 2 个输出则是 n = -32768 差之毫厘,失之千里! 更多这类软体缺失造成巨大危害的案例可见 [3],问题的根源竟然是「没掌握好罩杯」, 你说,是不是该诚实面对自己,学好数值系统呢?可参照线上讲座 [4] 回到之前提及的 linked list,这不全然是资料结构相关议题,在真实世界中,我们还要 讨论这类非连续记忆体的资料操作效率和正确性,尤其是 Throughput (吞吐量; 单位时 间内可处理多少的资料量) 和 Scalability (扩展性; 随着硬体资源的投入,可处理越来 越多的资料或工作时的能力或潜力),相当值得大书特书,可参见线上讲座 [5] [6]。 欢迎关注「你所不知道的 C 语言」系列讲座: http://hackfoldr.org/dykc/ [1] https://www.ted.com/talks/linus_torvalds_the_mind_behind_linux Linus 在 2001 年之後几乎就没有公开演讲,只接受访谈对话形式,这次在 TED 竟然出动了 TED 总监 Chris Anderson 来访谈,可能是头一遭 [2] https://zh.wikipedia.org/wiki/%E7%BD%A9%E6%9D%AF [3] https://hackmd.io/s/B1eo44C1- [4] https://hackmd.io/s/BkRKhQGae [5] https://hackmd.io/s/SkE33UTHf [6] https://hackmd.io/s/H19V4eyfV --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.116.82.61
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Gossiping/M.1547666654.A.446.html
1F:推 rockieloser: 推 01/17 03:24
2F:推 sammoon: 赶快推 01/17 03:26
3F:推 Turas: 趁早 01/17 03:27
4F:推 pipi8696044: 116 01/17 03:27
5F:推 jhjhs33504: 五推内 01/17 03:27
6F:推 siscon: 哇赛 01/17 03:28
7F:推 HateAnus: 十推 01/17 03:28
8F:推 cip604: 推 01/17 03:28
9F:推 dklash: 只能推了... 01/17 03:29
10F:嘘 blue999: 说中文 01/17 03:31
11F:推 ohsuoh: 笑了 01/17 03:31
12F:→ jserv: @blue999, 请问哪段的中文表达不清楚呢? 01/17 03:31
13F:推 IsMe5566: 钓到大神了 01/17 03:32
14F:推 POCARI5566: 有神快拜 01/17 03:33
15F:推 water200427: 这不管嗑了什麽,都给我来一点 01/17 03:33
16F:推 raagi: 推 老师是不是压力大 01/17 03:33
17F:→ jhjhs33504: 後半牵涉到计算机组织的部分略嫌草率 01/17 03:35
18F:推 Noxves: 推 01/17 03:36
19F:→ jserv: @raagi, 我面临的压力约 101.325 kPa (标准 1 大气压) 01/17 03:36
20F:→ jserv: @jhjhs33504, 感谢鞭策!表示之後我可以继续回文补充 01/17 03:37
21F:推 buckle: 推 01/17 03:38
22F:推 b0920075: 真的嗑很多...推 01/17 03:38
24F:推 WYchuang: 有人说C++现在很烂 不知道大神的看法如何 01/17 03:42
25F:推 ap954212: 老师早点睡 01/17 03:42
26F:推 kiwi0530: 老师辛苦了,这麽晚还没睡 01/17 03:43
27F:→ jserv: @kiwi0530, 又到选课时间,怕课堂学生不够,上来打广告 01/17 03:44
28F:推 f1256421: 我有推荐学弟妹去修 也有帮忙在低卡打广告ㄛ 01/17 03:53
29F:推 wenmilkyway: 文组QQ 01/17 03:54
30F:→ takechance: 文组路过,反正就是理组无能让火箭爆掉的对吧 01/17 03:58
31F:推 owlonoak: 请问可以在哪上你的课阿 01/17 04:00
32F:推 ninjahatoru: jserv! 01/17 04:02
33F:推 waeshine: 推推 01/17 04:03
34F:→ jserv: @takechance, 与其说「无能」,不如说现在工程挑战已超出 01/17 04:07
35F:→ jserv: 人们预期太多,而且随着自动驾驶、远距医疗手术,和通讯 01/17 04:08
36F:推 jellyfishuan: 如果两年前我是这样入门的话 QQ 01/17 04:08
37F:→ jserv: 系统大幅仰赖着复杂的软体,挑战更加严苛 01/17 04:08
38F:推 brad001: 希望大三大四後能修教授的课 觉得自己实力不够不敢选那堂 01/17 04:09
39F:→ brad001: QQ 01/17 04:09
40F:推 hizuki: gcc对强制转换都有检查了 01/17 04:09
41F:→ jserv: 不过也不用杞人忧天,许多软体工程师的创作在被大规模采纳 01/17 04:10
42F:→ jserv: 之前,就被宣布报销了 (特别是台湾软体工程师...) 01/17 04:10
43F:→ shawnfu: 看到一堆pointer就头痛, 还好不写底层 01/17 04:11
44F:推 doggying123: 推 01/17 04:12
45F:→ jserv: @brad001, 有体力有决心就可以来 :-) 01/17 04:13
46F:推 nonsu: 推 01/17 04:14
47F:推 victoryzy: 跟着老师学好C语言有机会征服C罩杯吗QQ 01/17 04:14
48F:→ jserv: @victoryzy, 其实我是先征服C罩杯,然後才发现掌握C语言 01/17 04:15
49F:→ jserv: 所以我读 C 语言规格书时,对 data type 特别有感啊 01/17 04:15
50F:推 bigrange: 老师接下来可以跳战D罩杯了 01/17 04:17
51F:→ jserv: @shawnfu, 以K&R C为例,许多人闻风丧胆的指标一直到该书的 01/17 04:17
52F:→ jserv: 第 5 章,约全书一半才提到。可解读为「你可以在不懂指标是 01/17 04:17
53F:→ jserv: 什麽之前,仍可掌握多数的 C 语言功能」 01/17 04:18
54F:→ jserv: @bigrange, 合用最重要,老婆哺乳涨得辛苦 01/17 04:20
55F:→ jserv: @owlonoak, http://wiki.csie.ncku.edu.tw/User/jserv # 01/17 04:24
56F:→ jserv: 上方连结有实体课程和线上讲座的清单 01/17 04:25
57F:推 revorea: 努...努力抽出时间把低级C语言学好中 01/17 04:32
58F:推 hackerman: 每次看到得跪,腿好酸... 01/17 04:45
59F:推 notneme159: 推个 完全看不懂 01/17 04:48
60F:推 u9914014: 推 01/17 04:49
61F:推 ZhouGongJin: 居……居然上钩了 01/17 04:55
62F:推 nanozako: 嗯 懂个5趴左右 01/17 04:57
63F:推 gaduoray: 推一下 免得别人以为我看不懂 01/17 04:59
64F:推 lala86591: Hello world 01/17 05:00
65F:推 scottshai: 请问最近 systemd v240 的 systemd-journald exploit 01/17 05:10
66F:推 thcb3181: 大神~ 01/17 05:13
67F:推 scottshai: 这类透过 stack overflow 的攻击能够从程式里面防范吗 01/17 05:14
68F:推 bewilderment: XD 01/17 05:14
69F:→ scottshai: 还是都使用 GCC 的 -fstack-clash-protection 编译就好 01/17 05:15
70F:推 ttff: 真神人也... 01/17 05:26
71F:推 alan23273850: 原来 linked list 可以从 10 行精简为 4 行阿...... 01/17 05:37
72F:→ alan23273850: 真是长知识了,从来都不知道 C 语言可以那麽美,就 01/17 05:38
73F:→ alan23273850: 跟C罩杯一样(误),只是一下&一下*的看得豆页女子痛. 01/17 05:39
74F:推 kinomon: 笑死 01/17 05:45
75F:推 q10242: 推 01/17 06:04
76F:推 a2470abc: 先推大神 不知道最近嗑了什麽超纯的 01/17 06:23
77F:推 abc88662a: 先跪 呜呜呜 jserv我推不上成大QQ 01/17 06:27
78F:推 cool9203: 推老师QQ成大资工所有得上老师开的系统类的课吗QQ 01/17 06:29
79F:推 coolda: 推 01/17 06:39
80F:推 rex44391: 推 01/17 06:55
81F:推 TrevorStory: 长知识了 01/17 07:01
82F:推 fwfly: 有神快拜 01/17 07:24
83F:推 will1118: 老师好 01/17 07:25
84F:推 heary: 推 01/17 07:25
85F:推 Kerry: 推 01/17 07:36
86F:推 CaptainTeemo: 太久没用 C 惹,那四行想了一下 01/17 07:37
87F:推 hotrain13: 大神出来了 01/17 07:37
88F:推 jerry0715no1: 老师好 01/17 07:40
89F:推 max0616: 推 01/17 07:45
90F:推 Donaldren: 推 01/17 07:46
91F:推 shunchao: 01/17 07:49
92F:推 silentduke: 推 01/17 07:49
93F:推 bala73: 有神快拜 01/17 07:51
94F:推 ljsnonocat2: 01/17 07:53
95F:推 gowellplayer: 赞 01/17 07:56
96F:推 cons: 推 01/17 08:06
97F:推 devilkool: 是大神 01/17 08:06
98F:推 chps920281: 推 01/17 08:09
99F:推 stw0975: 推 01/17 08:11
100F:推 phubber: 推 01/17 08:11
101F:推 pleasewait: jserv! 01/17 08:14
102F:推 mamaka: 推 01/17 08:15
103F:推 edward811022: 先推再说 01/17 08:16
104F:推 SiFox: 推,我也要嗑 01/17 08:16
105F:推 lookto: 推 01/17 08:19
106F:推 yihchii: 推 01/17 08:25
107F:推 lpoijk: 我的妈呀是大神 还很认真的回了废文XDD 01/17 08:25
108F:推 MattOwl: 赞 01/17 08:29
109F:推 ji3g4m0: 我妈问我为什麽跪着打字 01/17 08:30
110F:推 uonyang: 有神快拜…楼下快跪 01/17 08:30
111F:推 DWR: 什麽东西啦 有神快推 01/17 08:34
112F:推 gugugaga: 为什麽删除节点不用free掉啊 01/17 08:37
113F:推 fuga0000: 推 01/17 08:38
114F:→ ssccg: remove是把节点从list上拿掉,还没有确定要删掉节点 01/17 08:41
115F:推 minimax76715: 有神快拜 01/17 08:44
116F:推 kig88: 快拜 01/17 08:45
117F:嘘 loona: 难个屁 学店仔 01/17 08:45
118F:推 loona: 嘘错人 推回来 01/17 08:47
119F:推 crazywolf: 哇,虽然看不懂还是推一下 01/17 08:47
120F:推 perytech: 好文推! 01/17 08:49
121F:推 BinJohn5566: 推 01/17 08:51
122F:推 lwrwang: 神人快拜 01/17 08:54
123F:推 vi000246: 我还是写写出bug不会死人的程式码就好 01/17 09:05
124F:推 CoolboyLinya: 看无 01/17 09:07
125F:推 chang564: 朝圣 01/17 09:07
126F:推 e00291001: 参见大神 01/17 09:15
127F:推 yluok: 推 01/17 09:15
128F:推 dmmsiang: 推 01/17 09:15
129F:推 rum579: 推 01/17 09:16
130F:推 abb123456: 推 01/17 09:18
131F:推 jackwula9211: 太久没碰C都快看不懂了,大神降临 01/17 09:20
132F:推 vn509942: 大神 01/17 09:20
133F:推 abc53: 推 01/17 09:22
134F:推 legendd: 朝圣个 01/17 09:23
135F:推 jitaomef: 推 01/17 09:32
136F:推 youjan: 快推 01/17 09:36
137F:推 cphs102007: 蛤 01/17 09:37
138F:推 VIGUTA: 脑干中 我想我这辈子永远搞不懂指指标了 01/17 09:39
139F:推 tyr2004: 推 01/17 09:40
140F:推 Wand: 哈哈,大师早 01/17 09:43
141F:推 gs8613789: 拜一下 01/17 09:46
142F:推 TitanEric: 推唷 01/17 09:57
143F:推 hotsizzle: 跪推 01/17 09:57
144F:推 terryshu: 以跪 01/17 09:57
145F:推 Euteamo: 推 01/17 10:04
146F:推 qwer338859: 神 01/17 10:05
147F:→ jserv: @loona, 我读学店、我在学店教书,我骄傲! 01/17 10:09
148F:→ jserv: @vi000246, 可是这样的存在感就很低,咱们工程师要做大事的 01/17 10:09
149F:→ jserv: @ssccg, 感谢澄清,上面我提及的操作应拆解为 remove (移除 01/17 10:14
150F:→ jserv: 指定节点在 linked list 的连结) 和 reclamation (实际收回 01/17 10:15
151F:→ jserv: 不再连结的记忆体空间,如网友提到的呼叫 free) 01/17 10:16
152F:→ jserv: @lpoijk, 身处台湾最好的学店,当然要发废文啊 01/17 10:19
153F:→ jserv: @alan23273850, 任何领域追求极致的过程,都有「美」的成分 01/17 10:20
154F:→ jserv: @cool9203, 欢迎订阅线上讲座 YouTube 频道 (.GUTS) 01/17 10:21
155F:推 tim0922: 不管怎样 我先跪了 01/17 10:21
156F:推 ck237: 看不懂 01/17 10:23
157F:推 david220: XD 01/17 10:29
158F:推 KLSAKKOCK: 推 01/17 10:31
159F:推 mmc109815038: 看不懂 可是泪推 01/17 10:31
160F:→ jserv: @mmc109815038, Linus举出的程式码就跟诗经一样精简又富有 01/17 10:33
161F:推 love5566fan: 116 01/17 10:33
162F:→ jserv: 情感。我学中文好多年,至今仍是很难掌握,程式语言也如是 01/17 10:36
163F:推 xhung: 推推推 要不然别人以为我看不懂 XD 01/17 10:37
164F:推 v86861062: :) 01/17 10:47
165F:推 leo80042: 推 01/17 11:06
166F:推 zu00405479: 老师请问半路出家的要怎麽让基础更扎实? QQ 01/17 11:10
167F:推 charlly: 头痛 01/17 11:15
168F:推 kuanyuu: 老师好! 01/17 11:16
169F:推 KaryuuIssen: 移除时不用考虑找不到节点的情况吗 01/17 11:18
170F:推 Mood10207: 专业推@@! 01/17 11:24
171F:推 a23460701: 推推松鼠 01/17 11:24
172F:推 Lpll: 老师又出来拉高八卦的智商了QQ 01/17 11:26
173F:推 heaviest: 推,希望有缘去成大上老师的课 01/17 11:41
174F:推 Cybershit: 半夜不睡在发废文 01/17 11:45
175F:推 penta: 老师救我啊啊啊啊 01/17 11:45
176F:推 maxxpme: 推 01/17 12:11
177F:推 ikenaka: 116 01/17 12:15
178F:推 he02789222: 117楼笑死ww jserv只能跪<(_ _)> 01/17 12:15
179F:推 jetcoco: 嗯嗯 和我想的一样 01/17 12:32
180F:推 bij831: 说中文啊我看不懂 01/17 12:32
181F:推 fg008kimo: 这来源解说得不错 长知识 01/17 12:38
182F:推 bassplayer: 优质文! 01/17 12:41
183F:推 hohamita: 老师 程式码的可读性跟精简程度要怎麽取舍呢 01/17 12:45
184F:推 CrazyBug: Linked list都忘光惹 01/17 12:49
185F:推 bbo6uis122: 推 01/17 12:54
186F:推 xiefengan: 推 01/17 13:00
187F:推 zoidsa12101: C语言都快忘了 01/17 13:06
188F:推 OFAlpaca: 当初看到Linus的版本真的觉得很神奇 01/17 13:15
189F:推 bridgepons: 神 01/17 13:54
190F:→ Rapsody: 葛根: 解"肌"退热 谢谢 01/17 14:49
191F:推 j900155: 拜神 01/17 16:22
192F:推 a9233085: https://i.imgur.com/VuiZrxn.jpg 01/17 17:36
193F:推 Cyuhsuan: Push 01/17 19:02
194F:推 yangbob1203: 希望毕业前有机会修老师的课 01/17 19:30
195F:推 a5245242003: 请不会认真回废文 01/17 20:56
196F:推 aa85ss20: 老师! 01/17 20:58



※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: okcool (1.171.52.12), 01/17/2019 21:20:29







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灯, 水草

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

TOP