C++ 如何兼容Linux和window?
迷茫
迷茫 2017-04-17 14:33:29
0
7
1006

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(7)
小葫芦

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

リーリー
いいねを押す +0
左手右手慢动作

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

を提供します。
いいねを押す +0
左手右手慢动作

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

いいねを押す +0
PHPzhong

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

いいねを押す +0
Ty80

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

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

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

いいねを押す +0
黄舟

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

いいねを押す +0
迷茫

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

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート