Re: [問題] 新手一問:C比較常被拿來寫什麼?

看板C_and_CPP作者 (閉上眼的魚)時間12年前 (2012/06/08 00:21), 編輯推噓11(11010)
留言21則, 10人參與, 最新討論串3/4 (看更多)
※ 引述《WeBurn (燒)》之銘言: : ※ 引述《ODEs (發奮丘溫泉隊)》之銘言: : : 我知道很多作業系統都是用C寫的, : : 那請問C也可以用來寫一般的 application 嗎? : : 還是現在一般的 application program 都是用Java寫的? : : 新手一問, 請大家包涵~ <(_ _)> : C多被拿來寫(跨平台)開源庫或程式 : x264 ffmpeg bluez flac CELT...etc : 理由很簡單,C++很多庫 不少編譯器都沒完整實作 : 不要講說VC++/g++大多有實作 : 使用者會在什麼環境,用什麼編譯器 : 這是完全無法控制的事 : 反之C較沒這問題,依循C89(ansi C)標準來實現 : 絕大多數都沒問題 : 另外,JAVA的庫 絕大多數都是由C來實現者 : 當然也有些是用匯編 推文引用

06/07 22:32,
c 也有其他lib...怎麼會說這個是c++的缺點(?!
06/07 22:32

06/07 22:47,
W 大的意思應是,會實作完整C++標準庫的編譯器不多,但實作
06/07 22:47

06/07 22:49,
完整 C 函式庫的編譯器卻很多。
06/07 22:49

06/07 22:53,
std不是lib的其中隻一個嗎?
06/07 22:53
先給個連結,有空過目細閱 http://ppt.cc/J5JZ 。 對 C/C++ 這兩種程式語言而言,它有所謂的「規範」, 就像一個產品在規劃時期的時候,會有人去開它的標準規格一樣, 比如說是 隨身聽產品 ,假設有人定義出這項產品有哪些功能、體積等規格。 是的,所以當有人試用過這些 mp3 產品之後, 可能會再把標準規格改過,第一代可能叫 WalkMan <1998>, 試用了一年後可能覺得它的標準規格要改,改完後就叫 WalkMan<2000>。 以 C 而言,常聽到的規格諸如 ANSI C、C89、C90、C99, 就像上述一樣,它本身只是「規格」而已, 這種規格書紀錄非常詳細,甚至可以買得到, 從 + - * / 、識別字、括號、註解, 一直到要有哪些函式庫、哪些函式、 引數為何、轉回值為何,都有詳細規範, 說穿了,它只是一份書面的資料罷了。 而那些有在規格書上出現的函式庫,就叫「標準函式庫」。 是的,所以它又分成了 ANSI C、C89、C90、C99 標準函式庫。 < 回到 WalkMan 的例子 > 而當公認的 WalkMan 規格開出來後,會去實作的廠商不只一間, 這些根據這份規格實作出來的才是一份真正的產品。 對 C/C++ 而言,也一樣,有一些廠商或團體, 會去實作這些語言規範,成為一個軟體,這個軟體通常就叫「編譯器」, < 雖然這些的編譯器說的有點模糊,含蓋了許多其它的東西,不過太細跳過 > 諸如 gcc (GNU 出產)、vc (M$ 出產) 等,它們本身是編譯器, 如果要提到編譯器和軟體之間有什麼不一樣的話: #1FFfqI25 (C_and_CPP) 推文裡面說的便是,對於 C 語言而言, 大多數的編譯器都會實作其完整的「標準函式庫」, 但對 C++ 而言,要實作其完整的標準函式庫並不多。 < 這也不能怪這些編譯器開發單位,因為 C++ 真的是包山包海 > 但一些實作的產商,可能為了吸引別人的使用、購買, 除了「盡可能完整」的提到標準函式庫之外, 還會再多提供自家開發、額外的函式庫, 所以每家自己的函式庫可能不一樣,自然的, 你用了自家特有的函式庫後,就別想要拿這份程式碼, 能在其他編譯器裡順便編譯完成、生成執行檔。 比如說,在 vc 裡面開發,使用了他們特有的 _y0, _y1, _yn ( bessel function) 函式庫,就別期待這份程式碼可以在其他的編譯器 (如 bcb 、 gnu gcc 等) , 順利編譯、產生執行檔。 那,為何要強調「標準函式庫」? 假設哪天你換了作業系統之後,像是從 windows 換到 linux 或是 FreeBSD 等等, 如果程式裡面有用到不是標準的函式庫,是該編譯器特有的, 那很可能換了作業系統之後就不能正常執行。 但尷尬的是,C/C++ 標準函式庫裡面完全沒有規定, 真正要寫 GUI (使用者圖形化界面)時,該調用哪些函數, 所以在 linux 下寫的圖形化界面、在 windows 下寫的圖形化界面, 程式碼很可能會不一樣,這問題便是討論串中的「跨平台」問題。 當然「跨平台」這說法現在已有點泛濫了,只要是 作業系統、CPU 架構不同 (x86, x64)、編譯器(compiler)不同 等, 這些都被統稱為不同之平台,而要解決跨平台問題,往往是最麻煩的, 最理想的狀況就是,寫好同一份程式碼, 這份程式碼它在不同的平台編譯後所產生的執行檔,都可以順利執行。 基本上個人認為這難度頗高,試想一下作業系統有哪些就好... 而在討論串裡面所提到的 QT, gtk , VC, MFC, wx... 等, 他們除了標準函式庫之外,都還有自己其他「額外」的函式庫, 但同一份程式碼要從 windows 作業系統跨到 linux 作業系統, 基本上好像是不可能的,但確實有幾份 compiler 致力在做這件事, 這便是原文推文串裡所在討論的一些事。 關於跨平台問題,本身會是一項筆戰, 考慮的話以後要將產品多角化時會較方便, 但相對的開發會花很多時間,假設考慮了三份作業系統, 你可想一下,同一個 function,最差的情況可能要寫三次。 所以真正「跨平台」問題,基本上不怎麼可能由一般的 coder 去解決, 一般 coder 能做的事情很少,大多能做的只有第一步 : 去找、去問 哪套編譯器對於跨平台這件事有在支援。 若您真屬初學者,跨平台問題現在對你而言實在是太早, 除非現在對你而言已是工作上的選擇才有討論的必要 : : 我知道很多作業系統都是用C寫的, : : 那請問C也可以用來寫一般的 application 嗎? : : 還是現在一般的 application program 都是用Java寫的? : : 新手一問, 請大家包涵~ <(_ _)> 在回到原問題前,先跳個 tone, 我忘了在哪裡看過一篇什麼 師父 與 徒弟 的故事,"so long" (很長), < 有人記得在哪的話麻煩 po 縮網址 , 感謝> 故事大綱是二、三個 programmer 接了一份要寫網頁的案子, 這二、三個 programmer 看別人用 ASP 覺得很好用, 但他們師父認為 ASP 是邪魔歪道,叫他們要用 C 語言寫, 因為痛苦是一種修鍊。 莫名的師公 ( 師父的師父 )突然出現,罵了這群人不上進, 想當初,這問題他還要用 asm (組合語言) 完成才行。 C/C++ 可以做的事很多, 諸如 作業系統、硬體控制、再寫一份程式語言、視窗程式、資料庫管理、 文書編輯軟體等等,這些都辦得到,甚至可以較不精確的說 「 VB 辦得到的事情,用 C 語言一定也辦得到」 「既然 VB 辦得到的事, C 語言都辦得到,那 VB 為什麼還會存在?」 原因是, C 語言辦得到的,不代表 C 語言適合辦。 你可以想一下,如果有份功能相同的程式, 用 VB 寫起來 100 行,用 C 語言寫起來 500 行, 用 asm 寫起來 10000 行,你會先哪個? 為何不選 asm ?他的效能最快耶 !而且 asm 也可以寫視窗程式耶! <無誤> 承如大多數人所言,扣除掉平台問題,C語言在做的事情大多是比較低階, 或強調這份程式需要極高效率的時候,扣除一些極少數的例外, C/C++ 通常會是首選的程式語言,甚至也有些人真的先 asm 做那「極需」效率的東西。 < 不過寫起來未必會比較快,想知道原因的話可查一下什麼是 lazy evaluation > : : 還是現在一般的 application program 都是用Java寫的? 答案是:不一定。 一般的 application program 會挑用哪種程式語言未必, 以單機而言,在 Windows 上可能會是 C++/CLI、 C# ,也可能會是其他。 因為有些問題可能會有某方面的程式語言較適合撰寫, 甚至一些公司內部會以 C/C++ 程式語言, 再去開發其他的 library 或程式語言, 這些看起來根本就是另一個程式語言。 也如我於上篇所說的,很多人的做法是,對於這份程式較強調效率部份, 可能用 C/C++ 語言寫好,包成動態連結檔 (dll), 而在刻劃一些視窗、button 等的工作,就交由另一套程式語言做去 (如 vb), 最後按下 button 的動用,就去呼叫包好的 dll function。 至於到底要選用哪一套,或選用哪幾套程式語言, 這通常不會是由一般 coder 在做的決策, 而是一些歷史因素,或是主管、客戶端在決定的事。 最後給的建議是,別想一套程式語言打天下, 也別認為學很多程式語言是件很難的事, 只是學會 C++ 或 Java < 是不用到 Monster Level >, 其他的程式語言要學會真的不難, 甚至相信很多人是,因為這份專案臨時要學 VBA 之類的其他程式語言, 還不都是花一、二星期邊學邊寫,專案趕完後 VBA 是什麼又全忘光了。 以上一點心得,參考就好。 -- 「自從我學了 C# , 人都變聰明 , 考試都考一百分」 「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」 「自從我學了 Java , 明顯變壯 , 個子也變高了 」 「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.161

06/08 00:22, , 1F
推用心文
06/08 00:22, 1F

06/08 00:32, , 2F
這一篇文章值 1000 Ptt幣...夭壽喔
06/08 00:32, 2F

06/08 00:40, , 3F
很同意最後一段啊!真的是邊學邊寫,然後寫完就全忘了
06/08 00:40, 3F
※ 編輯: EdisonX 來自: 180.177.76.161 (06/08 00:46)

06/08 00:41, , 4F
"學會"c++....Orz
06/08 00:41, 4F

06/08 00:44, , 5F

06/08 00:44, , 6F
http://ppt.cc/lH5A 這三個網址都不錯,參考看看
06/08 00:44, 6F

06/08 00:45, , 7F
http://xkcd.com/378/ 真正的程式設計師用蝴蝶
06/08 00:45, 7F

06/08 00:48, , 8F
我很推excel/vba,excel是我認為20世紀人類最偉大發明之一.
06/08 00:48, 8F

06/08 00:48, , 9F
C++的好處就是大部分複雜的概念都有,所以跳其他容易
06/08 00:48, 9F

06/08 00:49, , 10F
壞處就是比較不好學XD
06/08 00:49, 10F

06/08 00:54, , 11F

06/08 00:54, , 12F

06/08 00:55, , 13F
這兩篇很貼切的說了c++不好學...
06/08 00:55, 13F

06/08 00:58, , 14F
我覺得這篇最中肯的部分在簽名檔...
06/08 00:58, 14F

06/08 07:58, , 15F
推簽名檔XD
06/08 07:58, 15F

06/08 13:00, , 16F
c++之父可能也沒有預料今日的狀況
06/08 13:00, 16F

06/08 13:41, , 17F
謝謝你詳細的回答~ ^_^
06/08 13:41, 17F

06/10 11:47, , 18F
那篇文章是洪朝貴寫的:http://goo.gl/ANYIB
06/10 11:47, 18F

06/10 11:49, , 19F
主要在討論重造輪子的問題。
06/10 11:49, 19F

06/10 12:30, , 20F
Wow!! 太感謝 mjsg 大了!這篇我覺得寫得很讚!! 感謝 :)
06/10 12:30, 20F

06/10 20:16, , 21F
不會,我也覺得寫的很不錯。
06/10 20:16, 21F
文章代碼(AID): #1FqDKOdv (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FqDKOdv (C_and_CPP)