これは、クロスプラットフォーム プログラムを作成する際によくある問題です。
ライブラリが必要な抽象化を提供できる場合があります。たとえば、Boostには、まったく同じコードを使用して複数のプラットフォームでファイルを列挙したり、ディレクトリを操作したりできるファイルシステム ライブラリがあります。
また、通常、現在コードをビルドしているコンパイラを検出できるシンボルが定義されています。希望どおりの機能がない場合でも、独自のものを定義できます。
FooOS と BarOS という名前の 2 つの異なる架空のオペレーティング システム用にソフトウェアをビルドする必要があるとします。私は 2 つの記号を発明しようとしていFOO_OS
ますBAR_OS
。私のコードでは、次のようなことができます。
#ifdef FOO_OS
#include <foo_stuff.h>
#elseif BAR_OS
#include <bar_stuff.h>
#endif
void do_something()
{
#ifdef FOO_OS
do_it_this_way();
#elseif BAR_OS
do_it_that_way();
#endif
}
ここで、FOO_OS
またはを定義する必要がありますBAR_OS
。これは、IDE のプロジェクト構成またはコンパイラのコマンド ラインで実行できます。あなたの投稿には詳細が含まれていないので、Google を使用して特定の状況を調べてください。
コードをコンパイルするときに、ソースを通過してこれらの条件文を適用する前処理ステップがあります。次のパスは、実際にコードをコンパイルします。たとえば、Visual Studio のプリプロセッサに関するドキュメントを次に示します。