※ 引述《leslieha (懂的付出才會幸福)》之銘言:
: Visual Studio 2005
: 有問題的code: (請善用置底文標色功能)
: #define _CRT_SECURE_NO_WARNINGS
: #include <stdio.h>
: #include <stdlib.h>
: #include <string.h>
: #include <math.h>
: #define MY_PRINTF(buf, format) sprintf(buf,##format)
: int main()
: {
: int i = 0;
: char str[100];
: printf("(1)__\r\n");
: MY_PRINTF(str, "%d\r\n, i");
: printf("(2)__\r\n");
: printf(str);
: printf("(3)__\r\n");
: return 0;
: }
這份code 看起來像是 trace log的 implement
關於 print log部份 有點小麻煩
比較舊的compiler 不支援 macro __VA_ARGS__ 展開
so 這個trace log原本的寫法會是像這樣
#ifdef _DEBUG_
#define MY_TRACE(F) do{ printf(F); }while(0)
#define MY_TRACE_P1(F,a) do{ printf(F,a); }while(0)
/* ... */
#else
#define MY_TRACE(F) //沒看錯 後面的確沒有東西
#define MY_TRACE_P1(F,a)
#endif
coder要幫compiler做很多動作...
幸運的是... VC 2005 有support C99的 macro ARGS展開
so 你可以簡單用一行代替 (應該吧)
#define MY_TRACE(...) do{ printf(__VA_ARGS__); }while(0)
^^^ ^^^^^^^^^^^
reference: http://en.wikipedia.org/wiki/Variadic_macro
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.121.211