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