Re: [討論] 沒有C語言的實戰經驗,要怎麼磨練?
建議可以看看《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
--
[P1389R1] Standing Document for SG20: Guidelines for Teaching
C++ to Beginners
https://wg21.link/p1389r1
SG20 Education and Recommended Videos for Teaching C++
https://www.cjdb.com.au/sg20-and-videos
--
謝大大分享
感謝
資料型別在不同的機器或實作上會有不同大小這點真的很煩
…XD
所以才有int32_t int64_t啊
搞int32_t和int64_t又脫離抽象層變成實體層啦
intN_t 主要是給予 bit-pattern 的保證, 而且編譯器也可以選擇 用軟體支援如 __int128 的操作, 所以還是足夠抽象的.
我看不出來那本書有最強調可攜性耶 至少文字上很少
後面還塞一堆C++ 不知道現在還有沒有
C 語言強調自己是運作在假想機器上,怎麼有種智能障礙者
強調自己是用智力來學習的感覺...
錯是沒錯啦 orz
因為很多人真的以為c可以完全翻譯成組語
其實在現代編譯器作用下 就算是c語言你也不容易猜到
背後被生成什麼組語了
忽略bit數本來就是錯誤的抽象啊...變數的corner case
本來就該在寫的時候被考慮 它也是程式邏輯的一部分
等型別的抽象化已經做夠足了, 如
極值(INT_MAX)
,
位元數(INT_WIDTH)
等, 可以在大多數情境下使用. 因為這裡不是專板提 太多就失焦惹.. 0rz
謝謝分享
我也不認同"C 語言強調自己是運作在假想機器上".
C 是有某種程度的抽象話,但這年頭說假想機器或 abstrac
t machine,我第一個會想到的是 JVM 或 LLVM 這類的東西
。
c有llvm後端ㄚ
其實是新機器為了讓C語言跑更快,所以設計的像C的假想機器
不然早期處理器設計百花齊放
12
C語言本身不難, 只有32個keywords 難的是compiler/linker, runtime, platform/architecture 一般我們會考這些, 而不是語言本身 想學習C, 我會建議從CPython入手 常用的CPython runtime, 整個都是用C寫的12
做C跟底層 可以去看CMU 15-213/18-213 aka CSAPP 國內有些課算是有參考到的 像是交大開的Unix Prog.(簡單版) / OSDI(這難度應該不下正版15213) 成大的Linux 核心設計(他的英文其實叫系統編程?)5
前面已經有高手提供不少正確概念 1. 學歷 > C lang 2. 難的不是C , 而是CS 相關觀念 3. 可以從 linux or open source 學習 這邊在補充一點, 就是embedded 部份
56
Re: [閒聊] 寫程式真的這麼邪門嗎?: 初五開工 這邊用C++給大家玩一個小遊戲 一個hello world等級的小程式 #include<iostream>29
[閒聊] Intel最大"黑歷史"?奔騰4產品全面解析對岸UP主做的影片 這裡附上簡介 有興趣有基礎可以看看,蠻多有趣的地方的 經常在網上能看見許多奔騰4相關的評論和視頻,確實這個產品太特殊了。這次視頻希望 能從多個角度出發對這個產品做一個具體的介紹,並且嘗試回答兩個問題:奔騰4失敗在20
Re: [分享] 用一個簡單的數學公式來幫忙設計OOP類別先講結論: 我反對原文的結論「OOP易學難精」 就我個人到現在的感受是「難學易精」 為什麼呢? 以下分享個人看法16
Re: [問卦] 會寫 x =x+1 的資工人 數學到底多糟阿??阿肥外商碼農阿肥啦!最近都在打DI沒空上線發廢文。 因為對於任何的program他的理解"="這個概念叫做assign,也就是我把原本的x加上1以後再 賦值給x,這東西在上升就是計算機哲學的定義了,你接受這套體系才有談下去的資格。 這個還延伸到lvalue跟rvalue的概念,如果你去寫 int x;13
Re: [請益] 程式怎麼選擇與入門?在這個年代, C 語言應該不是最適合初學者第一個學習的程式語言。 對初學者來說,一開始能夠培養語感、學會用程式解決問題的能力才是最重要的。 先試著習慣寫程式,並習慣用程式邏輯言思考與表達,同時看能否嘗試解決一些自己在意的問題, 試著從實作中獲得成就感並了解是否適合這種人格特質。 如果在這個情況下還想進一步徹底瞭解電腦 (機器/Machine) 底層運作的機制的話,C 語言就可以是一個很好的開始。5
[討論] 大數據與產業:當電腦科學變成支援知識最近高虹安似乎是台灣政壇的熱門話題,她因為說過自己是大數據專長,我就在想:為何大 數據跟非電腦跟資訊領域扯上關係? 後來在出差期間,跟蜂蜜井的專家聊到室內空氣品質與節能的關係,他們給了一個有趣的連 結:4
[請益] 私立科大新鮮人請益上學期快過完了 沒意外的話,下學期就等領畢業證書了 但看了一下104,覺得大概畢業後我就失業了QQ 翻了一下,他們需要的能力、擅長工具我都幾乎沒碰過 目前比較能說熟悉的語言是C和javascript(但不熟HTML和CSS 因為我在node.js上開發)4
Re: [閒聊] 賽博英雄傳從哪裡開始好看?賽博英雄傳 有個超級容易混淆的點 會讓剛看這本書的人覺得很混亂 就是許多武俠玄幻仙俠都有的內力與境界 這本書的內力不是絕大多數武俠仙俠玄幻裡的習以為常的 內力,靈力,神力 魔力 不是用來大規模操作能量,強化身軀 放大招2
Re: [請益] 為什麼文組轉職主流是寫code寫文章是寫給人看 讓人讀 要有起承轉合 注意冗言贅字 知道什麼時後用什麼用詞 這沒有錯 但是寫 Code 也是寫給人看的 不是給機器看的 所以也可以有起承轉合 注意冗言贅字 而編譯器的功能是像是 翻譯 將程式碼翻譯成 10101010 給機器看