7

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

  • さまざまなコンパイラや環境で自動的に定義されるプリプロセッサ マクロは? (例: __GCC__WIN32__WIN32__)__CYGWIN__
  • コンパイラと標準ライブラリのどのバージョンが比較的新しい「標準」関数をサポートしていますか (例: C99 long double 三角関数 sinl()、cosl()、...)
  • 単一の移植可能な機能が存在しないように見える場合、典型的なタスクを実行するためにさまざまなプラットフォームで使用できる機能は何ですか? (例: サブ秒の精度で現在の時刻を取得する)

Linux/gcc、cygwin、mingw32、および Visual Studio でコンパイルする必要があるコードを頻繁に作成し、必要な情報を取得するために、複数のソース (Linux のマニュアル ページ、MSDN、コンパイラ ドキュメント) からのメモを頻繁に比較する必要があります。これは、開発者が常に遭遇する問題に違いありません。この情報を簡単に理解できるリファレンスにコンパイルするリソースはありますか?

(この質問では、wxWidgets や boost のようなクロスプラットフォーム ライブラリには特に興味がありません。誰かが独自のクロスプラットフォーム ライブラリやプログラムを作成するのに役立つリソースやテクニックに興味があります。)

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

4

4 に答える 4

4

事前定義された C/C++ コンパイラ マクロに役立つリソースの 1 つを次に示します。

于 2009-06-09T17:42:03.747 に答える
1

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

于 2009-06-09T17:10:33.463 に答える
1

それは本当にあなたの具体的なプロジェクトに依存しますが、私はしようとします

  • 可能であれば、ISO 準拠のコードと POSIX に固執します。
  • -Wall を使用して、すべての警告を取り除きます。
  • autoconf と autotoolset が役立つかどうかを確認してください。
于 2009-06-09T17:35:12.450 に答える
0

C/C++ 標準に従います。

http://www.open-std.org/jtc1/sc22/wg21/docs/standards

于 2009-06-24T16:57:22.023 に答える