2012-10-02 40 views
0

我打算使用Cygwin套件在Netbeans上編寫Windows上的ANSI-C程序,稍後我想編譯UNIX系列操作系統上的源代碼並使用程序。我應該擔心任何種類的可塑性問題嗎?C在Windows上編寫在UNIX上編譯和副版本

+1

行終止,請確保您爲每個系統/編譯器使用正確的格式。 – TheZ

+0

您能否詳細解釋一下? – ferit

+0

UNIX系統用'\ n'終止文本文件行,而Windows則支持'\ r \ n'行終止。您可能需要在兩者之間進行轉換,或者找到一個選項來切換Netbeans中的默認類型。可能是一種稱爲換行符或行終止的選項。 – TheZ

回答

1

如果僅使用在C標準中所描述的功能性,所述一組可能的不相容的通常減少到:

符號性的 char
  • 尺寸所有類型的(例如int = long = 32在Windows中,不一定是在UNIX上),我的意思是全部,包括指針和enums
  • 糟糕的想法類型轉換和強制轉換,尤其是涉及指針和nega略去的值(在表達式中符號和無符號類型的混合是容易出錯的太)的類型
  • 對準和它們的結構中的填充/工會
  • 端序位域的
  • 順序
  • 實現定義/特定的行爲,例如當分割有符號值時,負值的右移,舍入和符號
  • 浮點:不同的實現和不同的優化
  • 未指定的行爲,例如,函數參數和子表達式評估的順序,memcpy()複製數據的方向(從低到高地址或其他方式)等等
  • 未定義的行爲,例如, i+i++a[i]=i++,修改字符串常量,指針引用時,它的指向對象是不見了(例如free()'d),不使用或濫用constvolatile,等等等等
  • 供給與不適當的參數導致未定義的行爲,例如標準庫函數調用printf()樣功能與錯誤數或種參數
  • 非ASCII字符/字符串
  • 文件名格式(特殊字符,長度,區分大小寫)
  • 時鐘/時間/區域設置格式/範圍/值/配置

還有更多。實際上,你必須閱讀的標準,並注意什麼保證正常工作的,什麼不是,如果有任何條件。

如果您使用的東西C標準外,該功能可能無法在不同的平臺上可用的或相同的。

所以,是的,這是可能的,但你必須要小心。這通常是你做出的假設,使得你的代碼很難移植。

1

會有可比性問題,但只要你堅持基本的unix功能,他們應該可以管理命令行應用程序。但是,如果你的應用程序有一個GUI或必須與在UNIX環境中的其它程序進行交互,你也許會後悔你的方法。

另一種方法是在桌面上的虛擬機中運行適當的unix版本,並確保沒有兼容性問題。

+0

謝謝。還有一個問題,反之亦然?我的意思是編寫在Windows上編譯的UNIX上。 – ferit

+0

我只在windows-> unix方向工作,但只要你堅持最小公分母的子集,你應該沒問題。你必須處理的簡單事情是行尾,int大小,文件命名約定等等。 – ddyer