C ã«ããããããã°åºåã®ã¸ã¬ã³ã
ãéçºä¸ã«ãããã°ãã°ãåºåããããã§ããªãªã¼ã¹æã«ã¯åºåããããªãããã¨ãããããªè¦æ±ã¯ããªãã®é »åº¦ã§ããã
ãããªæãã§ãããã¨ã«ãªãã ããï¼ãããã°ã¨ãªãªã¼ã¹ãåãåãã #ifdef ã¯çç¥ï¼ã
#include <stdio.h> #include <stdarg.h> #define debug1(fmt, ...) printf("%s(%d):" fmt, __func__, __LINE__, __VA_ARGS__) #define debug2(arg) do { printf("%s(%d):", __func__, __LINE__), printf arg; } while (0) int debug3(const char *fmt, ...) { int rc; va_list va; va_start(va, fmt); rc = vprintf(fmt, va); va_end(va); return rc; } int main(int argc, char *argv[]) { debug1("debug1:%s\n", "arg"); debug2(("debug2:%s\n", "arg")); debug3("debug3:%s\n", "arg"); debug1("debug1\n", NULL); debug2(("debug2\n")); debug3("debug3\n"); return 0; }
å¦çç³»ã C99 ããµãã¼ããã¦ãããªãããã使ãããã®ã¯ debug1 ã ãããããããã¦ç°¡ç´ ãã¤èªç¶ã«æ¸ãããã®ã®ãå¯å¤é·å¼æ°ãå¿ è¦ãªãå ´åã§ãæ¸ããªããã°ãªããªãã¨ããæ¬ ç¹ããã*1ããããä¸è¨ã®ä¾ã ã¨ã-Wall ãªã©ã§ printf ã«å¯¾ããä¸è¦ãªãã©ã¡ã¼ã¿ãåå¨ããã¨è¦åãåºã¦ãã¾ãã
å¦çç³»ã C99 ããµãã¼ããã¦ããªããªããdebug2 ã ããããããã¯å¼æ°ã®ã«ãã³ãäºéã«ãªã£ã¦ãã¾ãã¨ããè¦ãç®ã¨æ¸ãã«ããã®æ¬ ç¹ãããããã ããè¦åçã¯ä¸ååºãªãã
ä¸è½ãªã®ã¯ debug3 ã ããããã¯é¢æ°ãå®ç¾©ãã¦ãã¾ãããªãªã¼ã¹æã«ãå®ä½ãåå¨ãã¦ãã¾ãã¨ããåé¡ã«å ãã__func__ã__LINE__ çã®ãããã°åºåã«å¿ é ã¨ãããããã¯ãã使ç¨ã§ããªããªã£ã¦ãã¾ãã®ãã¤ãã*2ã
åèªèº«ã¯ãdebug1 ã®å ´åãããã° debug2 ã®å ´åãããããªã C++ ã®å ´åã ã¨ã¾ãç¶æ³ãå¤ãã£ã¦ããã
2012/08/14 追è¨:
ã³ã¡ã³ãæ¬ã§ä»¥ä¸ã®æ¹æ³ãæãã¦ããã£ãã
#define debug4(...) {printf("%s(%d):", __func__, __LINE__); printf(__VA_ARGS__);}
ãªãã»ã©ããããªãå¯å¤é·æååãä¸è¦ãªå ´åã«ãä¸è¦ãª NULL ãæ¸¡ããªãã¦ãããã