你好,我正在研究C編程。C編程 - Linux和OSX之間的差異
我想知道Linux和OSX在C中有區別嗎?我知道Windows和Linux/Unix之間有一些(如獲取系統時間戳)。是否有任何特定的命令或技術不能用於其中的一種? 「基本」程序是否應該同時運行?
我知道C不是一種交叉編譯語言,但OSX和Linux都是Unix--不是嗎?
你好,我正在研究C編程。C編程 - Linux和OSX之間的差異
我想知道Linux和OSX在C中有區別嗎?我知道Windows和Linux/Unix之間有一些(如獲取系統時間戳)。是否有任何特定的命令或技術不能用於其中的一種? 「基本」程序是否應該同時運行?
我知道C不是一種交叉編譯語言,但OSX和Linux都是Unix--不是嗎?
什麼樣的改變不是語言本身,而是庫(和相關的API調用)。只要你堅持使用標準的POSIX調用,Mac OSX和Linux在這方面沒有區別。 Linux和Mac OSX都是符合POSIX標準的系統。
當然,在談論專有的Apple庫時,你不能指望在Linux下找到它們。但這是另一個問題。 Linux內部也一樣。
請注意,我們正在談論來源兼容性,而不是二進制兼容性。你根本不需要修改你的源代碼,但你必須分別爲每個平臺編譯它。
是的,而且,也不能在OS X上使用Linux API。但標準C是「標準」的原因。 – 2013-10-16 20:27:20
Linux包含Linux和Darwin遵循的基本POSIX標準的很多擴展(Linux是「標準」,因爲它完全像Linux一樣)。正如Stefano所指出的,在很多情況下,這很好,但如果你有一個爲Linux編寫的程序,而不考慮可移植性(「在Ubuntu和SuSE上運行」不是「可移植性」),你應該期望看到一些不同的行爲並缺少擴展。例如,mremap()
和pipe2()
是Linux特定的功能。 SOCK_NONBLOCK
是一個特定於Linux的標誌,可用於socket()
等。手冊頁通常會在「符合」部分中指明特定於Linux的某些內容。
o.O ... O_O ...:o - 「我知道C不是跨平臺語言」 - 那麼你意識到完全錯誤的東西。 C是一種跨平臺的語言。 – 2013-10-16 20:24:57
[可執行文件是否與OS X「兼容」?](http://stackoverflow.com/questions/9439436/is-a-linux-executable-compatible-with-os-x) – zubergu
也許我應該添加不是像Java那樣的跨平臺語言。是交叉編譯語言更好的表達 – arnoapp