ログツール等で__FILE__
や__BASE_FILE__
を渡してソース位置を表示する事をよくやると思いますが、
モジュールのようにもう少し大きい括りを渡してフィルタを楽にしたい時が有ります。
#ifndef MODULE_NAME
# define MODULE_NAME "FOO"
#endif
#define ERR(fmt, ...) printf("ERR %s %s %d %s (" fmt ")\n", MODULE_NAME, __FILE__, __LINE__, __FUNC__, ##__VA_ARGS__)
void foobar() {
ERR("status = %d", -1); // -> ERR FOO src/foo/bar.c 100 foobar (status = -1)
}
このMODULE_NAME
を個別に定義しはじめると面倒なので、
ビルドシステムがMakefileであれば、$(CC) -c
に渡されるフラグを一つ追加します。
-DMODULE_NAME="\"$(shell basename $(dir $<) | tr a-z A-Z)\""
大抵はモジュール名 = ディレクトリ名で十分なので、問題ないでしょう。
http://stackoverflow.com/questions/8487986/file-macro-shows-full-path