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