VisualStudio 2005 では __VA_ARGS__ が使える!
むかしBREWの開発をしているとき、VisualStudioで__VA_ARGS__(可変長マクロ)が使えなくていろいろと苦労した思い出がありました。
最近、ひさびさにBREWの開発案件を担当し、しばらくは vim + 実機 だけで開発をしていました。
が、今日ふと思い立って 作っていたソースを VisualStudio 2005 でコンパイルしてみると・・・
なんと __VA_ARGS__ がふつうにコンパイルとおるじゃないですかっ!!
例えばですが、以下のようなDBGPRINTFのプチ改造が #ifdef とか使わなくても VisualStudio でも ARM でも同じコードで動く ようになりました。
__VA_ARGS__ つかってるのは最後のほうの1行だけですが。
※VisualStudio 2003 以前ではコンパイルエラーになります。
#ifdef __DBGPRINTF #undef __DBGPRINTF #endif /// 元のDBGPRINTFを再定義 /// ついでにBrewLoggerでDBGPRINTFの出力の色を変える /// このあたりはmizopさんから教えてもらった #define ___DBGPRINTF GET_HELPER()->dbgprintf(DBGPRINTF_EX_FORMAT,DBGPRINTF_LEVEL_HIGH,__FILE__,__LINE__),GET_HELPER()->dbgprintf /// BrewLoggerで長いデバッグ文も最後まで出力されるように・・・ #define __DBGPRINTF(...) \ { \ char szDbgPrint[1024] = {0}; \ SNPRINTF(szDbgPrint, sizeof(szDbgPrint), __VA_ARGS__); \ for(uint32 si=0; si < STRLEN(szDbgPrint); si+=39){ ___DBGPRINTF(szDbgPrint + si); } \ } #ifdef DBGPRINTF #undef DBGPRINTF #endif /// コンパイルオプションでデバッグ文を簡単に削除できるように・・・ /// これをしとかないとリリース時のモジュールサイズが無駄にでかくなってしまう #ifdef _DBG_PRINT #define DBGPRINTF(...) __DBGPRINTF(__VA_ARGS__) #else #define DBGPRINTF(...) #endif