検索

ホームページ  >  に質問  >  本文

C++ 如何兼容Linux和window?

有时在C++ 中调用有关操作系统的函数时,需要不同的头文件,(例如Sleep()函数window下在头文件windows.h,Linux下是system.h并且函数名的S改为小写),这样容易产生两份不同的代码,有没有办法再同一份代码下兼容两个平台?

迷茫迷茫2812日前1025

全員に返信(7)返信します

  • 高洛峰

    高洛峰2017-04-17 14:35:29

    プラットフォーム間の違いは自分でカプセル化する必要があります

    リーリー

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 14:35:29

    この問題は基本的にすべての言語で発生します。JAVA が一度コンパイルされ、どこでも が実行される場合でも、仮想マシンはさまざまなプラットフォームの実装の詳細をカバーし、Unity のみを残すためです。上位層のインターフェイス。
    C 標準ライブラリは対応するソリューションを提供しませんが、#ifdef などのマクロ機能は、ワークロードが重い場合は、C 用のサードパーティのクロスプラットフォーム ライブラリを使用するだけで済みます。 、ワークロードが小さいため、自分で少しカプセル化することをお勧めします。
    サードパーティは、boostQT などのライブラリを使用できます。単純なスリープの場合、c 11标准模板库 は std::this_thread::sleep_for

    を提供します。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 14:35:29

    ブースト ライブラリを使用できます: http://www.boost.org/ 各 API はプラットフォーム間でパッケージ化されています。

    返事
    0
  • PHPz

    PHPz2017-04-17 14:35:29

    コードに関する問題はレイヤーを追加することで解決できます。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 14:35:29

    マクロを使用します。
    ifdef は win32 かどうかを決定し、そうでない場合は Sleep(xxxxx) sleep(xxxx/1000) を定義します

    または libc 関数を直接使用します

    cygwin でコンパイルするという別の方法もありますが、これには依存する DLL が必要になります

    返事
    0
  • 黄舟

    黄舟2017-04-17 14:35:29

    カプセル化。プラットフォームの問題を引き起こす可能性のあるすべての関数を自分でカプセル化し、条件付きコンパイルを使用してそれらを区別します。あなたが言及したスリープは単なる単純な問題であり、ソケットなどの複雑な問題の多くの詳細は異なります。

    返事
    0
  • 迷茫

    迷茫2017-04-17 14:35:29

    tbox xmake を使用すると、完璧なクロスプラットフォーム開発を行うことができます。 。

    http://xmake.io
    http://tboox.org

    返事
    0
  • キャンセル返事