インクルードするディレクトリをマクロ定数として持つ

とある事情から「インクルードするディレクトリが長いので何度も書きたくない」という状況になり、インクルードするディレクトリをマクロ定数に持って、インクルードするファイル名と連結してインクルードしたい、ということがありました。

そんなときの対応は、このようになりました:

// BOOST_PP_STRINGIZEと同等
// トークンを文字列化する
#define PP_XSTR(M) #M
#define PP_STR(x) PP_XSTR(x)

// インクルードするディレクトリ。
// 最後が / になってはならない (トークンとして使えない文字、というエラーになる)
#define MY_LIB_PATH aaa/bbb/ccc

// aaa/bbb/ccc/ddd.hをインクルードする
#include PP_STR(MY_LIB_PATH/ddd.h)

int main() {}

https://wandbox.org/permlink/I6jGIJcqLE4RMHFE

参照