#include <stdio.h>

#define ENABLE_DO_WHILE

#ifdef ENABLE_DO_WHILE
#define dbg_error(fmt, arg...)  \
        do{                     \
                printf("(%s,%d)error:"fmt, __FILE__, __LINE__,##arg); \
        } while(0)
#else
#define dbg_error(fmt, arg...)  printf("(%s,%d)error:"fmt, __FILE__, __LINE__,##arg)
#endif

int main()
{
        int ii;
        for(ii=0; ii < 8; ii++)
        {
                dbg_error("This is %d\n", ii);
        }
        return 0;
}

心得

1:  善用gcc -E 的結果來看.c被展開後的樣子.

2. printf("..."); 中間被雙引號包起來的部分, 都會放到.rodata, 包含%d, %x.

3. 上面兩種#define dbg_error  後面接的printf(), 一個需要";", 一個不需要, 這點還搞不太清楚.

arrow
arrow
    全站熱搜

    Orion 發表在 痞客邦 留言(1) 人氣()