看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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