Re: [讨论] 没有C语言的实战经验,要怎么磨练?

楼主: loveme00835 (发箍)   2021-07-25 03:31:59
建议可以看看《C How To Program》, 它的范例程式码品质不错,
文字说明也够多, 多做练习题可以帮助你理解语意.
不过有个观念需要厘清的是: C 语言程式是跑在抽象机器 (abstra-
ct machine) 而不是实体机器上 (只存在想像的虚拟机器), 所以它
和你的应用偏底层与否其实没什么关系. C 语言规范了抽象机器的
行为, 并且要求编译器的输出在实体机器上的执行结果要和抽象机
器相同 (5.1.2.3/1).
增加这层抽象化可以确保程式码可携, 只是撰写时需多留意这个观
念, 避免将实体机器的属性嵌进程式码里. 如 sizeof 运算子是对
物件大小资讯的封装; 但如果喜欢“从做中学”:
printf("sizeof(int) is: %zu\n", sizeof(int));
// (possible) output
// sizeof(int) is: 4
因此得到“int 大小为 32 bits”的结论, 那就本末倒置了. 这类
错误结论反而会让你遇到更多 undefined behavior, 影响学习成效
; 而偏底层应用则是需要活用 implementation-defined behavior.
《C How To Program》一书最强调的就是可携性, 这点和语言设计
理念相同, 基本上把这本读熟就能具备工作需要的语言知识. 你反
而得花更多时间去补充领域知识 (domain knowledge).
-
References
ISO/IEC 9899:202x (E) (N2596)
http://open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf
C99 Rationale
http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
作者: nicetw20xx (哇爱台湾)   2021-07-25 07:02:00
谢大大分享
作者: xoy232 (鬼岛希特勒)   2021-07-25 09:25:00
感谢
作者: brianhsu (坟墓)   2021-07-25 10:20:00
资料型别在不同的机器或实作上会有不同大小这点真的很烦…XD
作者: saitoh (Perhaps Love)   2021-07-25 10:41:00
所以才有int32_t int64_t啊
作者: labbat (labbat)   2021-07-25 12:37:00
搞int32_t和int64_t又脱离抽象层变成实体层啦
作者: krusnoopy (push)   2021-07-25 12:45:00
我看不出来那本书有最强调可携性耶 至少文字上很少后面还塞一堆C++ 不知道现在还有没有
作者: CoNsTaR ((const *))   2021-07-25 17:17:00
C 语言强调自己是运作在假想机器上,怎么有种智能障碍者强调自己是用智力来学习的感觉...错是没错啦 orz
作者: lturtsamuel (港都都教授)   2021-07-25 21:49:00
因为很多人真的以为c可以完全翻译成组语其实在现代编译器作用下 就算是c语言你也不容易猜到背后被生成什么组语了忽略bit数本来就是错误的抽象啊...变量的corner case本来就该在写的时候被考虑 它也是程式逻辑的一部分
作者: taipoo (要成功要积极)   2021-07-25 22:10:00
谢谢分享
作者: leolarrel (真.粽子无双)   2021-07-26 16:00:00
我也不认同"C 语言强调自己是运作在假想机器上".
作者: brianhsu (坟墓)   2021-07-26 18:33:00
C 是有某种程度的抽象话,但这年头说假想机器或 abstract machine,我第一个会想到的是 JVM 或 LLVM 这类的东西。
作者: lturtsamuel (港都都教授)   2021-07-26 20:30:00
c有llvm后端ㄚ
作者: wei115 (ㄎㄎ)   2021-07-26 20:45:00
其实是新机器为了让C语言跑更快,所以设计的像C的假想机器不然早期处理器设计百花齐放

Links booklink

Contact Us: admin [ a t ] ucptt.com