※ 本文為 MindOcean 轉寄自 ptt.cc 更新時間: 2019-06-06 00:10:33
看板 Gossiping
作者 標題 Re: [問卦] 為甚麼C語言自訂函式一定要在主程式上面?
時間 Wed Jun 5 21:55:19 2019
※ 引述《fragmentwing (片翼碎夢)》之銘言:
: 如題
: 最近終於開始自學C語言
: 為甚麼C語言一定至少要放個原型在主程式上方才行?
: 或者說,明明都是一行一行讀取,其他語言是怎麼做到可以把函式到處亂擺的
這問題非常好,我不知為何會引來負面聲音,可能是原發問人沒有把「其他語言」清楚
標示出來吧?抑或是問題太簡短呢?有趣的問題如果被忽略,那真是太可惜。
其實由 Dennis M. Ritchie (以下簡稱 dmr) 開發的早期 C 語言編譯器 [1] 沒有明確
要求 function prototype 的順序。dmr 在 1972 年發展的早期 C 編譯器,原始程式碼
後來被整理在名為 "last1120c" 磁帶中 [2],我們如果仔細看 c00.c 這檔案,可發現
位於第 269 行的 mapch(c) 函式定義,在沒有 forward declaration [3] 的狀況下,
就分別於第 246 行和第 261 行呼叫,奇怪吧?
而且只要再瀏覽 last1120c 裡頭其他 C 語言程式後,就會發現根本沒有 #include 或
#define 這一類 C preprocessor [4] 所支援的語法,那到底怎麼編譯呢?在回答這問題
前,摘錄 Wikipedia 頁面的訊息:
> As the C preprocessor can be invoked separately from the compiler with
> which it is supplied, it can be used separately, on different languages.
> Notable examples include its use in the now-deprecated imake system and for
> preprocessing Fortran.
原來 C preprocessor 以獨立程式的形式存在,所以當我們用 gcc 或 cl (Microsoft
開發工具裡頭的 C 編譯器) 編譯給定的 C 程式時,會呼叫 cpp (伴隨在 gcc 專案的
C preprocessor) 一類的程式,先行展開巨集 (macro) 或施加條件編譯等操作,再來
才會出動真正的 C 語言編譯器 (在 gcc 中叫做 cc1)。值得注意的是,1972-1973 年
間被稱為 "Very early C compilers" 的實作中,不存在 C preprocessor (!),當時
dmr 等人簡稱 C compiler 為 "cc",此慣例被沿用至今,而無論原始程式碼有幾個檔
案,在編譯前,先用 cat [5] 一類的工具,將檔案串接為單一檔案,再來執行 "cc"
以便輸出對應的組合語言,之後就可透過 assembler (組譯器,在 UNIX 稱為 "as")
轉換為目標碼,搭配 linker (在 UNIX 稱為 "ld") 則輸出執行擋。
所以說,在早期的 C 語言編譯器,強制規範 function prototype 及函式宣告的順序
是完全沒有必要的,要到 1974 年 C preprocessor 才正式出現在世人面前,儘管當時
的實作仍相當陽春,可參見 dmr 撰寫的 "The Development of the C Language" [6]
是完全沒有必要的,要到 1974 年 C preprocessor 才正式出現在世人面前,儘管當時
的實作仍相當陽春,可參見 dmr 撰寫的 "The Development of the C Language" [6]
C 語言的標準化是另一段漫長的旅程,來自 Bell Labs 的火種,透過 UNIX 來到研究
機構和公司行號,持續影響著你我所處的資訊社會。
你或許會好奇,function prototype 的規範有什麼好處呢?這就要從 "Rationale for
International Standard -- Programming Languages -- C" [7] 閱讀起,依據 C9X
RATIONALE 的第 70 頁 (PDF 檔案對應於第 78 頁),提到以下的解說範例:
extern int compare(const char *string1, const char *string2);
void func2(int x) {
char *str1, *str2;
// ... x = compare(str1, str2);
// ...}
編譯器裡頭的最佳化階段 (optimizer) 可從 function prototype 得知,傳遞給函式
compare 的兩個指標型態參數,由於明確標注了 "const" 修飾子,所以僅有記憶體地
compare 的兩個指標型態參數,由於明確標注了 "const" 修飾子,所以僅有記憶體地
址的使用並讀取相對應的內容,但不會因為修改指標所指向的記憶體內容,從而沒有產生
副作用 (side effect)。這樣編譯器可有更大的最佳化空間,可對照「你所不知道的 C
語言:編譯器和最佳化原理篇」,得知相關最佳化手法。
一如 C9X RATIONALE 提到,C 語言和其他受 Algol 影響的程式語言,都具備 function
prototype 機制,這使得編譯時期,就能進行有效的錯誤分析和偵測。無論是 C 語言、
B 語言,還是 Pascal 語言,都可追溯到 ALGOL 60 [9]。
prototype 機制,這使得編譯時期,就能進行有效的錯誤分析和偵測。無論是 C 語言、
B 語言,還是 Pascal 語言,都可追溯到 ALGOL 60 [9]。
ALGOL 是Algorithmic Language (演算法使用的語言) 的縮寫,提出巢狀 (nested) 結構
和一系列程式流程控制,今日我們熟知的 if-else 語法,就在 ALGOL 60 出現。
ALGOL 60 和 COBOL 程式語言並列史上最早工業標準化的程式語言。
可參見本看板 #1SdKXN4t
Re: [問卦] 為什麼只有C語言 A B語言呢? - Gossiping板 - Disp BBS
Han3 Kiang O2 (客家語四縣腔) 電腦程式語言的發展是個迷人的主題,畢竟人們一直都想駕馭著電腦,而程式語言就是 其中最關鍵的議題之一。為何我們該認真看待程式語言的歷史呢?因為即便某些程式
Han3 Kiang O2 (客家語四縣腔) 電腦程式語言的發展是個迷人的主題,畢竟人們一直都想駕馭著電腦,而程式語言就是 其中最關鍵的議題之一。為何我們該認真看待程式語言的歷史呢?因為即便某些程式
程式語言的演化,深受底層工具和硬體限制的影響,這次探討的 function prototype
及函式宣告的順序,其實就反映出編譯器演化的歷程。人類史上第一個編譯器,A-0
System 開發於 1951-52 年間,注意到當時的用語是 "System",而且名稱 A-0 代表
System 開發於 1951-52 年間,注意到當時的用語是 "System",而且名稱 A-0 代表
Arithmetic Language version 0,與其說是今天我們提及的高階語言編譯器,不如說是
程式的載入器 (loader) 或連結器 (linker)。
相關訊息可參見本看板 #1RhWSNPG
Re: [問卦] 寫程式語言的語言是怎麼來的? - 看板 Gossiping - 批踢踢實業坊
這問題困擾我超過 25 年,身為「文組」的我,希望可以解答部分提問。 致力於人文和科學教育的 Crash Course [1] 有部很棒的短片,可在十分鐘內 回覆上述大部分問題,請見: 短片中提及人類史上第一個編譯器,A-0 System [2] 開發於 1951-52 年間,注意
這問題困擾我超過 25 年,身為「文組」的我,希望可以解答部分提問。 致力於人文和科學教育的 Crash Course [1] 有部很棒的短片,可在十分鐘內 回覆上述大部分問題,請見: 短片中提及人類史上第一個編譯器,A-0 System [2] 開發於 1951-52 年間,注意
黑格爾在其 1820 年的著作「法哲學原理」提到: (德語原文)
> Was vernuftig ist, das ist wirklich;
> und was wirklich ist, das ist vernuftig.
英語可解讀為 "What is rational is actual and what is actual is rational.",
像是 C 語言這樣的工業標準,至今仍活躍地演化,當我們回顧發展軌跡時,凡是合乎
理性 (vernuftig),也就必然會出現、或成為現實 (wirklich),反過來說也成立。
甚至我們可推敲 C9X RATIONALE 字裡行間,每個看似死板規則的背後,其實都可追溯出
像是上方的討論。
歡迎關注「你所不知道的 C 語言」系列講座:
https://hackmd.io/@sysprog/HJpiYaZfl
千萬別忘了 C 語言的發展就是為了開發 UNIX 作業系統和相關系統程式,而 Linux 核心
自然就是將 UNIX 精神發揚光大的智慧結晶,歡迎關注「Linux 核心設計」課程,附有
線上教材:
http://wiki.csie.ncku.edu.tw/linux/schedule
[1] Very early C compilers and language,
https://www.bell-labs.com/usr/dmr/www/primevalC.html
[2] 位於 GitHub 的副本,
https://github.com/mortdeus/legacy-cc/
GitHub - mortdeus/legacy-cc: The earliest versions of the very first c compiler known to exist in the wild written by the late legend himself dmr.
The earliest versions of the very first c compiler known to exist in the wild written by the late legend himself dmr. - mortdeus/legacy-cc ...
The earliest versions of the very first c compiler known to exist in the wild written by the late legend himself dmr. - mortdeus/legacy-cc ...
[4] https://en.wikipedia.org/wiki/C_preprocessor
[5] cat 工具程式的作用是 "concatenate and print file",
https://www.unix.com/man-page/posix/1posix/cat/
cat(1) - concatenate and display files catan(3m), catanf(3m), catanl(3m) - complex arc tangent functions catanh(3m), catanhf(3m), catanhl(3m) - complex arc hyperbolic tangent functions catgets(3c) - read a program message catman(1m) - create the formatted files for the reference manual catopen(3c), catclose(3c) - open/close a message catalog cat(1) - concatenate files and print on the standard output cat(1p) - concatenate and print files catan(3), catanf(3), catanl(3) - complex arc tangents catan(3p), catanf(3p), catanl(3p) - complex arc tangent functions catanh(3), catanhf(3), catanhl(3) - complex arc tangents hyperbolic catanh(3p), catanhf(3p), catanhl(3p) - complex arc hyperbolic tangent functions catch(n) - Evaluate script and trap exceptional returns catchsegv(1) - Catch segmentation faults in programs catclose(3p) - close a message catalog descriptor catdic(1) - Download a dictionary catgets(3) - get message from a message catalog catgets(3p) - read a program message catman(8) - create or update the pre-formatted manual pages catopen(3), catclose(3) - open/close a message catalog catopen(3p) - open a message catalog
The cat utility shall read files in sequence and shall write their contents to the standard output in the same sequence. OPTIONS The cat utility shall ...
The cat utility shall read files in sequence and shall write their contents to the standard output in the same sequence. OPTIONS The cat utility shall ...
https://www.bell-labs.com/usr/dmr/www/chist.html
[7] Rationale for International Standard -- Programming Languages -- C
http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
[8] 你所不知道的 C 語言:編譯器和最佳化原理篇,
https://hackmd.io/@sysprog/Hy72937Me
https://en.wikipedia.org/wiki/ALGOL_60
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.82.61 (臺灣)
※ 文章代碼(AID): #1SzydGFl (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1559742928.A.3EF.html
推 : 頭1F 06/05 21:55
→ : hello world2F 06/05 21:56
推 : 前十3F 06/05 21:56
→ : 我也這麼覺得4F 06/05 21:56
推 : 快來推ㄍ不然被當文組5F 06/05 21:57
推 : 前十6F 06/05 21:57
推 : 先推7F 06/05 21:57
推 : 先推8F 06/05 21:57
推 : 這不是基本的嗎9F 06/05 21:58
推 : 推10F 06/05 21:58
推 : 嗯嗯嗯 就是這樣11F 06/05 21:58
推 : 神12F 06/05 21:59
推 : 看不懂13F 06/05 21:59
推 : 大大安安推一個14F 06/05 22:00
推 : 推一下 免得被說看不懂15F 06/05 22:00
推 : 推16F 06/05 22:00
推 : 推17F 06/05 22:00
推 : 看到這篇好像我不是CS的一樣QQ18F 06/05 22:00
推 : 朝聖19F 06/05 22:01
推 : 跪著推20F 06/05 22:01
推 : 這就是為什麼我恨C21F 06/05 22:01
推 : 專業22F 06/05 22:01
推 : 推23F 06/05 22:02
推 : 116一定是廢文 幫補血24F 06/05 22:02
→ : 淦 這樣摸不到C罩拉25F 06/05 22:02
推 : 大神又出來普渡眾生了26F 06/05 22:02
推 : 看不懂還是要推27F 06/05 22:02
推 : 嗯嗯 我也是這樣想的28F 06/05 22:02
推 : CCC29F 06/05 22:02
推 : 看不懂30F 06/05 22:03
推 : 推31F 06/05 22:03
推 : 恩恩跟我想的一樣 只是我懶的打32F 06/05 22:03
推 : 每次線上講座必看,可惜在新竹上班,不然就去旁聽了33F 06/05 22:03
→ : 我也是這麼想的34F 06/05 22:04
推 : 朝聖推35F 06/05 22:04
推 : 講古36F 06/05 22:04
推 : 老闆問我為什麼跪著上班37F 06/05 22:04
推 : 這個釣到jserv太扯38F 06/05 22:05
→ : 卡39F 06/05 22:05
推 : 錢錢40F 06/05 22:05
推 : 推41F 06/05 22:06
推 : 朝聖42F 06/05 22:06
推 : 太神啦 釣到ㄌ43F 06/05 22:06
推 : 推 朝聖44F 06/05 22:06
推 : 之前老師有去交大上物聯網什麼的課啊45F 06/05 22:06
推 : 看無46F 06/05 22:07
推 : 恩恩 跟我想得差不多47F 06/05 22:07
推 : 嗯嗯對丫48F 06/05 22:08
推 : 不過C++某些時候還是很好用啊49F 06/05 22:08
推 : 快推50F 06/05 22:09
推 : 推51F 06/05 22:09
推 : 前百52F 06/05 22:09
推 : 有神快拜53F 06/05 22:09
→ : 只能給個讚54F 06/05 22:09
推 : 跪了55F 06/05 22:09
推 : 嗯嗯 我也是這麼認為的56F 06/05 22:10
推 : 嗯,跟我想說的差不多57F 06/05 22:11
推 : 推一下 認真 還用RANDY的書 XD58F 06/05 22:11
推 : 先跪再說59F 06/05 22:11
推 : 沒錯 就是這樣60F 06/05 22:12
推 : 那為什麼有些程式語言不這樣用呢?61F 06/05 22:13
推 : 神62F 06/05 22:13
推 : 推63F 06/05 22:13
→ : 跟我想得差不多 中間有地方小錯但無傷大雅 可以接受64F 06/05 22:13
推 : 恩恩跟我想的一樣65F 06/05 22:13
→ : 完全看不懂,剛好也箭頭XD66F 06/05 22:13
推 : jserv下凡67F 06/05 22:13
推 : 太會了吧68F 06/05 22:14
推 : 推69F 06/05 22:14
推 : 看完覺得大學對不起我教授70F 06/05 22:14
→ : @jahfone, 最初C語言不用理會函式定義的順序,最終能夠處理71F 06/05 22:15
→ : 符號(symbol)之間的相依狀況即可。是後來C語言才變嚴格的
→ : 符號(symbol)之間的相依狀況即可。是後來C語言才變嚴格的
推 : 推! 好詳細長知識了 寫了這麼久的C都不知道標準來由73F 06/05 22:15
推 : 你在寫期刊74F 06/05 22:17
→ : @Ericz7000, 之前我在交大資工系還開了「自由開源軟體與75F 06/05 22:17
推 : 廢物cs生看不懂 QQQQQ76F 06/05 22:17
自由開源軟體與專案協作
此門課程分為二大部份,第一部份為與自由開源軟體專案協作相關的專題演講課程,包括技術平台的應用,以及授權知識的理解;第二部份為多人協同專案的實際參與,不限定參與方式必然為程式碼之寫作,但亦必須與自由開源軟體專案共工模式具有正相關,期末評分,則綜合演講課的出席比例,以及專案協作成果的報告內容為評鑑標準。 ...
此門課程分為二大部份,第一部份為與自由開源軟體專案協作相關的專題演講課程,包括技術平台的應用,以及授權知識的理解;第二部份為多人協同專案的實際參與,不限定參與方式必然為程式碼之寫作,但亦必須與自由開源軟體專案共工模式具有正相關,期末評分,則綜合演講課的出席比例,以及專案協作成果的報告內容為評鑑標準。 ...
→ : @kipi91718, 沒事,我只是練習打字,下次請鼓勵發問的人78F 06/05 22:18
推 : 推79F 06/05 22:19
推 : 這本書台灣不是很多人用的 根本是OS基石80F 06/05 22:19
→ : @jackwula9211, 針對 C++ 可講古的題材更多啊...嘶81F 06/05 22:20
推 : 有神快拜82F 06/05 22:22
推 : 但既然身為編譯式語言,完全可以分析完整份檔案再開始83F 06/05 22:23
推 : 好~! 完全不懂...還是給推84F 06/05 22:23
推 : 推85F 06/05 22:23
推 : 有神快拜86F 06/05 22:23
推 : 神87F 06/05 22:23
→ : 最佳化吧?哪個在先哪個在後其實可以忽略。88F 06/05 22:24
→ : @Gold740716, 涉及到 side effect89F 06/05 22:24
→ : cs 這篇看不懂可以自盡了90F 06/05 22:24
推 : 嗯嗯嗯 跟我想的差不多91F 06/05 22:25
推 : 一定要先推92F 06/05 22:26
推 : 你是不是成大教授93F 06/05 22:26
推 : 推94F 06/05 22:26
→ : 快推一個不然人家以為我們不懂Xd95F 06/05 22:26
推 : 推 跟我想的是一樣96F 06/05 22:27
→ : 我朋友交大教授 與你決一死戰97F 06/05 22:27
推 : 神98F 06/05 22:28
→ : @cattgirl, 可以請你朋友等我大學畢業,再來決鬥嗎?99F 06/05 22:28
推 : 推100F 06/05 22:29
推 : 推推101F 06/05 22:29
推 : 有神快拜102F 06/05 22:30
→ : 認真推103F 06/05 22:32
推 : 好強 XD104F 06/05 22:34
推 : 推105F 06/05 22:35
推 : 學程式語言還要讀歷史106F 06/05 22:35
推 : 推107F 06/05 22:37
推 : 嗯嗯 你說的沒錯108F 06/05 22:41
推 : 有貓給推109F 06/05 22:41
推 : 先推再看110F 06/05 22:41
推 : 推個111F 06/05 22:41
推 : 好啦,我看不懂112F 06/05 22:42
推 : 推113F 06/05 22:42
推 : 怕114F 06/05 22:42
推 : 嗯嗯115F 06/05 22:42
推 : 所以簡單的來說就是為了更容易在編譯時期找到錯誤與116F 06/05 22:46
→ : 最佳化囉?
→ : 最佳化囉?
推 : 算是有表達到我的想法, 給你75分118F 06/05 22:46
推 : 推119F 06/05 22:48
推 : 有神快拜120F 06/05 22:51
推 : 恩 跟我想的差不多121F 06/05 22:52
推 : 就算一知半解也要推122F 06/05 22:53
→ : 德文你也懂?123F 06/05 22:55
推 : 推124F 06/05 22:55
推 : 有神快拜125F 06/05 22:56
推 : 推126F 06/05 22:56
推 : 跪推 +1127F 06/05 22:57
推 : 推128F 06/05 22:59
推 : 朝聖129F 06/05 23:02
推 : 嗚嗚身為理組還是看不懂130F 06/05 23:03
→ : @ab37695543xs, 回顧程式語言的發展,人類的想像力很豐富,131F 06/05 23:04
推 : 7777777777777132F 06/05 23:04
→ : 像是LISP這類對應到數學抽象思考的語言,很早就提出了。但C133F 06/05 23:04
→ : 卻走了實務導向的路途,也就是一方面讓語言本身定義嚴謹,
→ : 另一方面確保編譯器和連結器得以有效實作出來
→ : 卻走了實務導向的路途,也就是一方面讓語言本身定義嚴謹,
→ : 另一方面確保編譯器和連結器得以有效實作出來
推 : 只能跪著推了136F 06/05 23:05
推 : 朝聖推137F 06/05 23:06
推 : 推138F 06/05 23:06
推 : 朝聖jserv139F 06/05 23:07
推 : 快推!免得被別人發現我文組的!140F 06/05 23:07
推 : 推 以前計算機很弱,對於記憶體與size更是斤斤計較, 所141F 06/05 23:09
→ : 以能從人這邊規範就規範
→ : 以能從人這邊規範就規範
推 : 神143F 06/05 23:10
推 : 嗯嗯144F 06/05 23:11
推 : 嗯嗯我也是這麼想的 只是懶得打145F 06/05 23:13
推 : 原來如此146F 06/05 23:13
推 : 初音只是個軟體147F 06/05 23:14
推 : 全台文組同學深表贊同148F 06/05 23:15
推 : 朝聖149F 06/05 23:15
推 : 寫了大半輩子程式也看不懂這篇在說什麼 只能推了150F 06/05 23:16
推 : 我早告訴過你了151F 06/05 23:18
推 : 正如我想152F 06/05 23:20
推 : 趕快推 以免被發現完全看不懂153F 06/05 23:21
推 : 簡單說就是為了最佳化啦.... 越早將宣告的部分寫出154F 06/05 23:23
→ : 在轉換的初期處理的時候就可以更好的安排資源
→ : 在轉換的初期處理的時候就可以更好的安排資源
推 : 沒錯跟我想的一樣156F 06/05 23:23
推 : 你及格了!157F 06/05 23:23
推 : 對對對沒錯沒錯 就是這樣 我也是這麼覺得 只是還沒來158F 06/05 23:25
→ : 得及寫文章
→ : 得及寫文章
推 : 我知道啊160F 06/05 23:25
推 : 嗯嗯 我也這樣覺得161F 06/05 23:26
推 : 八卦好文必須推162F 06/05 23:28
推 : .........163F 06/05 23:31
推 : 原來大家都這樣想164F 06/05 23:32
推 : 好聞必推165F 06/05 23:32
推 : 推,沒想到還能看到德文166F 06/05 23:36
推 : 跪著讀167F 06/05 23:36
推 : 這其實真的很基本……168F 06/05 23:37
推 : 推169F 06/05 23:39
推 : 推170F 06/05 23:40
推 : 恩恩,對,就這樣嘛,恩171F 06/05 23:41
推 : 嗯嗯 對172F 06/05 23:45
推 : 推173F 06/05 23:47
推 : 推174F 06/05 23:48
推 : 推175F 06/05 23:49
推 : 先推再看176F 06/05 23:50
→ : 推個177F 06/05 23:53
推 : 跟我想的差不多 打到一半被你先回答了178F 06/05 23:53
→ : 唉 本來想開示的 你都講完了179F 06/05 23:54
推 : 嗯嗯,我也這樣覺得。180F 06/05 23:54
推 : 雖推,但太硬了… 無法看完181F 06/05 23:55
推 : 推推 學了C語言 但看到你的之後感覺什麼都沒學過182F 06/05 23:55
推 : 跟我想的一樣183F 06/05 23:56
推 : 推推184F 06/05 23:57
推 : 長知識了185F 06/05 23:59
推 : 推186F 06/06 00:00
推 : 推推187F 06/06 00:00
推 :188F 06/06 00:05
推 : 嗚嗚嗚我廢物 只看得懂3成189F 06/06 00:07
推 : 推190F 06/06 00:07
推 : 竟然釣到大神191F 06/06 00:07
--
※ 看板: Gossiping 文章推薦值: 1 目前人氣: 0 累積人氣: 1304
作者 jserv 的最新發文:
- 回答這問題之前,我們應該先思考「什麼是 BSD?」 依據 FreeBSD 網站 的描述,FreeBSD 衍生自 BSD,後者則是 "the version of UNIX developed …49F 38推
- 「既然你誠心誠意地發問了,我們就大發慈悲地告訴你」(語出「火箭隊」) 這則笑話在 2010 年就出現巴哈姆特電玩資訊站 ,內容改寫自中國網友的創作, 已有十餘年,不過該笑話的弊端在於「針」。DVD 燒 …499F 407推 3噓
- 我是跟鄉民進來看熱鬧的,我跳進來了,我又跳出去了,打我啊笨蛋! (取自方唐鏡 名言) 學校老師應該忙著開學事宜,我幫他們回覆你的提問。 原題「在 Linux 系統底下要怎麼自己搞 win3.1 呢?」 …101F 83推
- 剛好我需要跟學生解釋為何 Linux 核心原始程式碼的風格規範 中,限制一行至多 80 個字元,其典故跟「打孔卡」(punched card) 有關。 1890 年代,美國人口普查就使用新發明的穿孔卡 …247F 230推
- 這恰好連結台灣特有的 BBS (電子布告欄) 文化及早期 Linux (和 BSD) 文字編輯器的 關聯。也讓我想起一年前過世的陳昇瑋博士,他的舊名是陳寬達,並以 Xshadow 的名號 馳名於早期的 …512F 444推 5噓
點此顯示更多發文記錄
( ̄︶ ̄)b klin1 說讚!
2樓 時間: 2019-06-05 23:22:29 (澳門)
→
06-05 23:22 MO
學用語言和了解語言是兩種不同的概念,好吧⋯我兩種都不會,現在只連寫vba都瘋狂copy
3樓 時間: 2019-06-06 22:46:19 (台灣)
→
06-06 22:46 TW
一般人不用特別去學C語言啦~ 你要是台清交成的,會演算法,很容易就去聯發科,在那用C去寫protocol,例如5G晶片的protocol,它的難度不是C語言,而是protocol要與晶片要debug,調適~ 對高材生來說,學這個是瞬間的,C語言只是工具,幾天就會敲了,主要還是研究~
4樓 時間: 2019-06-06 22:51:17 (台灣)
→
(編輯過) TW
這說明什麼問題,一般人你學C,你會找不到頭路,那些公司根本不看你會不會C語言,首先看你學歷,想學寫程式找頭路的,跳過C,直接去學寫網頁、學別的高級語言比較實在~
回列表(←)
分享