C/C++言語で#ifdefを書くのは、OSなどの移植性に限るべきだと前に述べた。
しかし、ある程度以上のリッチな環境だったら#ifdefを使う必要性はないのではと思うようになった。実際RaspberryPiでも使われているPython言語には、windows, Linux, MacOSでも同じように動く。RaspberryPiでも動くようなら、ある程度リッチな環境ならばOS移植性を気にしなくてすむようなライブラリを使えばよいのではないかと思います。
そのようなライブラリの1つはBoostであるようです。
#ifdefが使いたくなる状況の1つは、ファイル操作です。
ディレクトリを作る、ただそれだけの操作がwindowsとLinuxで異なるために、「とりあえず、ディレクトリは予め作ってあることにしよう」などという状況のプログラムは珍しくありません。
Boostのファイル操作のライブラリを使うことは、Pythonのos.pathモジュールを使うのと同じような利便性が得られます。自分のメンテナンスするコードから、#ifdefをなくすことができます。
もし、ディスクスペースの関係で、Boostをインストールすることができない場合には、Boostで確かめられている外部仕様にあわせた最小限の互換ライブラリを書けばいいのです。(その部分にだけ#ifdef #endifは残りますが。)
ファイル/ディレクトリ操作
http://boostjp.github.io/tips/filesystem.html#remove-file
Boost のインストール方法の解説です。
http://www.kmonos.net/alang/boost/install.html
boostjp : Boost日本語情報サイト
http://boostjp.github.io/howtobuild.html
追記:
boost::filesystemをReleaseモードで使う場合に必要になるファイルの大きさは次のとおりでした(使用OS:Windows Vista)。
Boostのライブラリのうち、どの範囲でだけ使うということを決めておけば、
システムのリソースの制限があるプロジェクトでも、許容できる範囲である方が大多数ではないかと推測いたします。
yyyy/mm/dd hh:mm 907,786 libboost_filesystem-vc120-mt-1_58.lib
追記
C++17 以降の場合
#include <filesystem>
を使ってください。