#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(), 一個需要";", 一個不需要, 這點還搞不太清楚.
全站熱搜
留言列表