Re: [舉手] 可以問在Linux上使用C的問題嗎?
※ 引述《beagle (紅茶犬)》之銘言:
: ※ 引述《ninaro (ninaroN NN )》之銘言:
: : PS:本身是C新手(跑過一點點程式)
: 以前用哪一種 compiler ?
: Linux 的 compiler 一律是 gcc 系列, 但開發環境 (IDE) 有很多種,
: 我自己是完全不用 IDE, 只用文字編輯器寫 source code,
: 然後直接用 gcc+make compile 成執行檔...
Linux 下面的 compiler 可不是只有 gcc 喔,它只是最容易取得的一種而已。
比如你如果用 intel 的 processor ,也可以用 Linux 版本的 icc 。
在 compile 的時候會對 processor 的設定作一些最佳化,可能會跑得比較快。
不過我印象中只有試用版是免費的,正式版收費並不便宜。
: : Linux的超新手(只看過入門書還沒在平台上使用過)
: : 過一陣子入學會接觸,故自己先唸而產生下面問題,
: : 希望前輩們能幫助後學解惑,感謝^^
: : 我的問題如下:
: : Unix是由C寫成,而Linux是Unix-like,C雖可不受硬體限制,但是否會受OS限制呢?
: 最早的 Unix 是大部份 C 小部份組合語言寫成的, 但 Unix 家族眾多, 血統複雜...
: Linux 這非純正血統的突變種也是大部份 C 小部份組合語言寫成的...
: 但不同 Unix 之間有不少相異之處, 並非只要是用 C 寫出來的就一模一樣...
: C 有與 OS 無關的標準 library, 也有 OS 相關的 library,
: stdio, stdlib 這些都是與 OS 無關可以直接移植的...
: conio, "windows.h", Direct X 這些就是 OS 相關的部份...
: 初學者最常遇到麻煩的是 pause(), 這是 DOS 才有的 function ...
應該要反過來說,每一個 compiler 支援哪些指令,不支援哪些指令,
是看 compiler 的實作方式。一般 C compile 大概至少支援 ANSI C 的標準。
(不過實際上大部份的都沒有百分之百完整正確地支援)
library 的話其實也不完全是跟 OS 綁定的,只要有裝該 library ,
compiler 在編的時候能認得,就會編得過去。
不過 windows 和 Linux 常用的函式庫命名常不相同,所以無法共用一個程式。
如果要用 C 寫跨平台程式,那麼使用某些非標準的函式庫時,
就可能需要自己寫一些 wrapper 把底層不同的實作函式庫包成一樣的樣子,
再讓 compiler 透過一些參數來辨認平台作編譯的動作。
不過這不是一個 C 的新手應該要去碰的東西,牽扯太廣了。
: : 如在Linux下跑C需要修改什麼?
: 如上所述, 看情形, 也可能不需修改就能用。
: 使用越多 Windows 函式庫, 移植難度就越高。
: 牽涉到視窗 UI 介面的部份是完全不同, 幾乎需要整個重寫,
: 不過初學者應該還沒學到才對...
: 純文字介面就不用太擔心了...
如果看得懂 warning 跟 error ,就先拿去編,再看缺什麼就改什麼,
盡量用有支援的函式去取代沒支援的。反正不對 compiler 都會講,
自己看 code 很多時候也看不出來。
: : 需要下載不同的compiler嗎?
: : 麻煩各位了,感謝^^
: Linux 安裝光碟通常會內附完整 gcc (GNU Compiler Collection),
: 安裝時有選就會裝上去, 但不同 distribution 選擇元件的方式不一樣...
: 因為你說你學的是 C, 我這篇裡面講的都是 C 語言的相關名詞,
: 如果你學的其實是 C++, 其實跨平台移植的道理也是相通。
如果不太在意效能,又想要跨平台,就用 java 吧,事情一下子就變單純了。
如果會 C/C++ 寫得熟,轉 java 應該勉勉強強不會花太多時間。
--
我實實在在的告訴你們,一粒麥子不落在地裡死了,
仍舊是一粒,若是死了,就結出許多子粒來。
約翰福音 12:24
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.31.132
→
06/01 17:03, , 1F
06/01 17:03, 1F
→
06/01 18:28, , 2F
06/01 18:28, 2F
→
06/02 10:52, , 3F
06/02 10:52, 3F
→
06/02 10:53, , 4F
06/02 10:53, 4F
→
06/02 12:03, , 5F
06/02 12:03, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):