Re: [問題] 新手一問:C比較常被拿來寫什麼?
※ 引述《EdisonX (閉上眼的魚)》之銘言:
: 如果程式裡面有用到不是標準的函式庫,是該編譯器特有的,
: 那很可能換了作業系統之後就不能正常執行。
: 但尷尬的是,C/C++ 標準函式庫裡面完全沒有規定,
: 真正要寫 GUI (使用者圖形化界面)時,該調用哪些函數,
: 所以在 linux 下寫的圖形化界面、在 windows 下寫的圖形化界面,
: 程式碼很可能會不一樣,這問題便是討論串中的「跨平台」問題。
: 當然「跨平台」這說法現在已有點泛濫了,只要是
: 作業系統、CPU 架構不同 (x86, x64)、編譯器(compiler)不同 等,
: 這些都被統稱為不同之平台,而要解決跨平台問題,往往是最麻煩的,
: 最理想的狀況就是,寫好同一份程式碼,
: 這份程式碼它在不同的平台編譯後所產生的執行檔,都可以順利執行。
: 基本上個人認為這難度頗高,試想一下作業系統有哪些就好...
: 而在討論串裡面所提到的 QT, gtk , VC, MFC, wx... 等,
: 他們除了標準函式庫之外,都還有自己其他「額外」的函式庫,
: 但同一份程式碼要從 windows 作業系統跨到 linux 作業系統,
: 基本上好像是不可能的,但確實有幾份 compiler 致力在做這件事,
: 這便是原文推文串裡所在討論的一些事。
我必須要說,大多數狀況下 Qt 只需要一份 code
我只懂 Qt,其他的我不懂,但我相信 gtk+ 和 wxwidget 亦如是
除非你真的需要操作特定平台的屬性
例如為了強制關閉視窗特效,我必須使用 Windows 的 DWM 和
libx11 (不得不說 X11 的文件實在是 ... 不過這是另一個故事)
而且這些問題基本上和 toolchain 無關
真正跟 toolchain 有關的是,即便有相同的標準也不一定就有相同的行為
VC6 在 C++ 的瘋狂事蹟就不用提了,真是時代的眼淚
VC10 的 lambda bug 我就踩過三個
鳥蛋的是 C++ 還有 name mangling 的問題,這還沒標準
而 desktop 上最慘的是 XCode
因為 GNU license 的問題,XCode 還在用 GNU gcc 4.2(apple 有修改過)
用它的 llvm-gcc 編譯某些 project 還會失敗(e.g.: FFmpeg)
要用它附的 clang 3.0 才會成功
偏偏 clang 3.0 又沒實作 lambda
當你去找了 gcc 4.7 和 clang 3.1 源碼自已編以後才發現
泥馬的 gnu gcc 沒支援新的 Object-C 語法
clang 3.1 漏了 std::function 的 copy constructor
然後把這些用不同 toolchain 編好的 lib link 起來之後
你還要擔心會不會 crash 在 libc++ 裡(我遇過二次,4.6 和 4.7 各一次)
然後你就會發現某些 project 堅持使用 C 還是有它的道理
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.44.193
推
06/08 01:27, , 1F
06/08 01:27, 1F
推
06/08 08:00, , 2F
06/08 08:00, 2F
推
06/08 08:01, , 3F
06/08 08:01, 3F
推
06/08 08:25, , 4F
06/08 08:25, 4F
→
06/08 12:29, , 5F
06/08 12:29, 5F
推
06/08 12:45, , 6F
06/08 12:45, 6F
推
06/08 13:46, , 7F
06/08 13:46, 7F
推
06/08 21:20, , 8F
06/08 21:20, 8F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):