Cygwinスイートを使用してNetbeansを使用してWindowsでANSI-Cプログラムを作成することを計画しており、後でUNIXファミリOSでソースコードをコンパイルしてプログラムを使用したいと考えています。互換性の問題について心配する必要がありますか?
質問する
339 次
2 に答える
1
C標準で説明されている機能のみを使用する場合、考えられる非互換性のセットは通常、次のようになります。
- の署名
char
- すべてのタイプのサイズ(たとえば、Windowsでは
int
=long
= 32ビット、UNIXでは必ずしもそうではありません)、私は文字通りすべてを意味し、ポインタとenums
- 特にポインタと負の値を含む、よく考えられていない型変換とキャスト(式での符号付き型と符号なし型の混合もエラーが発生しやすい)
- 構造体/共用体での型の配置とそのパディング
- エンディアン
- ビットフィールドの順序
- 実装定義/特定の動作、たとえば、負の値の右シフト、符号付きの値を除算するときの丸めと符号
- 浮動小数点:さまざまな実装とさまざまな最適化
- 不特定の動作、たとえば、関数パラメーターと部分式の評価の順序、
memcpy()
データをコピーする方向(下位アドレスから上位アドレス、またはその逆)など。 - 未定義の動作、たとえば
i+i++
、またはa[i]=i++
、文字列リテラルの変更、ポイントされたオブジェクトがなくなったときのポインタの逆参照(たとえばfree()'d
)、使用または誤用const
していないvolatile
、など - 未定義の動作につながる不適切なパラメータを標準ライブラリ関数に提供します。たとえば
printf()
、パラメータの数や種類が間違っているような関数を呼び出します。 - 非ASCII文字/文字列
- ファイル名の形式(特殊文字、長さ、大文字と小文字の区別)
- クロック/時間/ロケール形式/範囲/値/構成
まだまだあります。実際に規格を読んで、動作が保証されているものと動作しないもの、および条件があるかどうかを確認する必要があります。
C標準以外のものを使用する場合、その機能は別のプラットフォームでは使用できないか、同一ではない可能性があります。
ですから、そうです、それは可能ですが、注意する必要があります。通常、コードの移植性が低くなるのは、あなたが行う仮定です。
于 2012-10-03T04:22:42.177 に答える
1
比較可能性の問題がありますが、基本的なUNIX機能に固執している限り、コマンドラインアプリケーションで管理できる必要があります。ただし、アプリにGUIがある場合、またはUNIX環境で他のプログラムと対話する必要がある場合は、おそらくアプローチを後悔するでしょう。
もう1つの方法は、デスクトップの仮想ボックスで適切なUNIXのフレーバーを実行し、互換性の問題がないことを確認することです。
于 2012-10-02T19:35:25.173 に答える