19
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OSごとに#ifdef を書く必要は本当にあるのか

Last updated at Posted at 2015-09-06

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>

を使ってください。

19
20
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?