2009-06-09 15 views
6

複数のプラットフォームやコンパイラで動作するC/C++コードの作成を支援するために、どのようなリソースがありますか?たとえば、私は定期的に次のような質問をしています。クロスプラットフォームC/C++開発のためのリソース

  • さまざまなコンパイラや環境でどのプリプロセッサマクロが自動的に定義されていますか? (例えば__GCC__WIN32__WIN32____CYGWIN__)コンパイラや標準ライブラリのバージョンは比較的新しい "標準" の機能をサポートして
  • (例えばC99長い二三角関数SINL()、COSL()、...)
  • 単一のポータブル機能が存在しないような場合、典型的なタスクを実行するために、さまざまなプラットフォームでどのような機能を利用できますか? (例えば、サブ秒の精度で現在の時刻を取得)

のLinux(私は多くの場合、Linuxでは/ gccの下でコンパイルする必要があり、コード、cygwinの、MINGW32、およびVisual Studioを書き、私は頻繁に複数のソースからのノートを比較する必要がマニュアルページ、MSDN、コンパイラのドキュメント)を使用して、必要な情報を入手してください。これは、開発者が常に抱えている問題でなければなりません。この情報を簡単に消化可能な参照にコンパイルするリソースはありますか?

(私はwxWidgetsやブーストのようなクロスプラットフォームのライブラリに特に興味がありません。自分のクロスプラットフォームのライブラリやプログラムを書くのに役立つリソースやテクニックにもっと興味があります)

EDIT:これは、私が探しているページのタイプの例です:http://predef.sourceforge.net/precomp.html。さまざまなコンパイラ/環境とそれらを識別するために使用できるプリプロセッサマクロの良い調査。一般的な関数が存在しない場合、プラットフォーム間でほぼ同等の関数(Linuxの場合はgmtime_r()、Windowsの場合は_gmtime_s()または_ftime())を比較する同様のリソースを見つけることは素晴らしいことです。

+0

?それはブドウのような味があるが、すべてが「グラフィー」ではないことを求めるようなものです。 – Kieveli

答えて

1

クロスプラットフォームコードを作成する基本的な方法は、特定のプラットフォームに依存しないコードを書くことです。たとえば、ほとんどすべての元のUNIXユーティリティは、特定のプラットフォームを参照せずに記述することができます。条件付きコンパイルを使用して特定のマクロに依存するコードを書くことは、ベストプラクティスではありません。

+0

原則として私は同意し、可能な限りこれを行いますが、低レベルの作業のためにプラットフォーム間に共通の機能がない状況はたくさんあります。たとえば、システム時間をミリ秒精度にしたい場合は、Linuxではftime()を使用できますが、Windowsでは_ftime()と呼ばれます。別の例として、Linuxビルドでは、デフォルトの設定パスを〜/ .myprogramに設定し、Windowsでは%APPDATA%\ MyProgramに設定します。 –

1

それは本当にあなたの具体的なプロジェクトに依存しますが、私は、ISOに準拠したコードとPOSIX可能な場合に

  • スティックにしようとするだろう。
  • -Wallを使用してすべての警告を削除します。
  • autoconfとautotoolsetが役立つかどうかチェックしてください。
関連する問題