有时在C++ 中调用有关操作系统的函数时,需要不同的头文件,(例如Sleep()函数window下在头文件windows.h,Linux下是system.h并且函数名的S改为小写),这样容易产生两份不同的代码,有没有办法再同一份代码下兼容两个平台?
Sleep()
windows.h
system.h
S
业精于勤,荒于嬉;行成于思,毁于随。
プラットフォーム間の違いは自分でカプセル化する必要があります
この問題は基本的にすべての言語で発生します。JAVA が一度コンパイルされ、どこでも が実行される場合でも、仮想マシンはさまざまなプラットフォームの実装の詳細をカバーし、Unity のみを残すためです。上位層のインターフェイス。 C 標準ライブラリは対応するソリューションを提供しませんが、#ifdef などのマクロ機能は、ワークロードが重い場合は、C 用のサードパーティのクロスプラットフォーム ライブラリを使用するだけで済みます。 、ワークロードが小さいため、自分で少しカプセル化することをお勧めします。 サードパーティは、boost や QT などのライブラリを使用できます。単純なスリープの場合、c 11标准模板库 は std::this_thread::sleep_for
#ifdef
boost
QT
c 11标准模板库
ブースト ライブラリを使用できます: http://www.boost.org/ 各 API はプラットフォーム間でパッケージ化されています。
コードに関する問題はレイヤーを追加することで解決できます。
マクロを使用します。 ifdef は win32 かどうかを決定し、そうでない場合は Sleep(xxxxx) sleep(xxxx/1000) を定義します
または libc 関数を直接使用します
cygwin でコンパイルするという別の方法もありますが、これには依存する DLL が必要になります
カプセル化。プラットフォームの問題を引き起こす可能性のあるすべての関数を自分でカプセル化し、条件付きコンパイルを使用してそれらを区別します。あなたが言及したスリープは単なる単純な問題であり、ソケットなどの複雑な問題の多くの詳細は異なります。
tbox xmake を使用すると、完璧なクロスプラットフォーム開発を行うことができます。 。
http://xmake.iohttp://tboox.org
プラットフォーム間の違いは自分でカプセル化する必要があります
リーリーこの問題は基本的にすべての言語で発生します。JAVA が一度コンパイルされ、どこでも が実行される場合でも、仮想マシンはさまざまなプラットフォームの実装の詳細をカバーし、Unity のみを残すためです。上位層のインターフェイス。
を提供します。C 標準ライブラリは対応するソリューションを提供しませんが、
#ifdef
などのマクロ機能は、ワークロードが重い場合は、C 用のサードパーティのクロスプラットフォーム ライブラリを使用するだけで済みます。 、ワークロードが小さいため、自分で少しカプセル化することをお勧めします。サードパーティは、
boost
やQT
などのライブラリを使用できます。単純なスリープの場合、c 11标准模板库
は std::this_thread::sleep_forブースト ライブラリを使用できます: http://www.boost.org/ 各 API はプラットフォーム間でパッケージ化されています。
コードに関する問題はレイヤーを追加することで解決できます。
マクロを使用します。
ifdef は win32 かどうかを決定し、そうでない場合は Sleep(xxxxx) sleep(xxxx/1000) を定義します
または libc 関数を直接使用します
cygwin でコンパイルするという別の方法もありますが、これには依存する DLL が必要になります
カプセル化。プラットフォームの問題を引き起こす可能性のあるすべての関数を自分でカプセル化し、条件付きコンパイルを使用してそれらを区別します。あなたが言及したスリープは単なる単純な問題であり、ソケットなどの複雑な問題の多くの詳細は異なります。
tbox xmake を使用すると、完璧なクロスプラットフォーム開発を行うことができます。 。
http://xmake.io
http://tboox.org