C/C++プリプロセッサを利用した環境依存コードの切り替え。通常の#ifdef
〜#endif
方式で切り替えるより見た目が綺麗?
unsigned int get_tick_msec() { ENV_windows( return GetTickCount(); ) ENV_linux( struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return (tp.tv_sec * 1000) + (unsigned int)(tp.tv_nsec / 1000000); ) }
上記コードで用いたマクロ定義は下記の通り。(__VA_ARGS__
利用のため、C99以降またはC++11以降)
#ifdef _WIN32 #define ENV_windows(...) __VA_ARGS__ #else #define ENV_windows(...) #endif #ifdef __linux__ #define ENV_linux(...) __VA_ARGS__ #else #define ENV_linux(...) #endif