看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 之前寫C的時候我會用marco來寫一些debug的訊息 大概像這樣子 #ifdef DEBUG #define _DEBUG(str,args...) fprintf(stderr, str, ##args) #else #define _DEBUG(str,args...) #endif 但是寫C++的時候想改成用cerr 用法我想還是用<<來寫 所以我就直接改成了 #define _DEBUG cerr 這樣我直接寫成 _DEBUG << "一堆訊息之類的" << endl; 就方便很多 可是問題就來了... 沒有define的地方我不知道怎麼寫 原本想直接用comment掉 但是只用//的話 換行會出問題 所以就放棄這個寫法了 現在我是用這種寫法 #define _DEBUG(x) x #else #define _DEBUG(x) 然後在程式裡面就寫成 DEBUG(cerr << "xx" << endl); 但是這種寫法我覺得真的很不美...... 所以請教有沒有比較好的寫法 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.227.159.141
legnaleurc:可以弄一個 null object 來實作 nop 04/05 21:01
yoco315:我猜原 po 是希望完全不要有 runtime overhead.. 04/05 21:02
aecho:嗯…fprintf這一類的長的很漂亮啊,為什麼一定要弄成另一個 04/05 21:03
aecho:樣子呢? 04/05 21:03
legnaleurc:或是寫一個函式把 arg... wrap 給 cerr 04/05 21:03
yoco315:對喔 1F沒錯 的確也可以沒有overhead @@ 04/05 21:03
yoco315:aecho printf 系列沒有型別檢查 04/05 21:04
loveme00835:第二種方式很美阿 ._. 你把它當函式呼叫當然醜 04/05 21:06
softwind:... Android logcat方式 04/05 21:19
loveme00835:這個試試 http://codepad.org/01X9EC9w 合法與否還要 04/05 21:54
loveme00835:查證一下 04/05 21:55
softwind:LOGE("error %d,%s", errno, strerror(errno) ); 不好看? 04/05 21:58
akasan:http://codepad.org/vqRQ60ZZ 之前寫的 拿去參考看看吧XD 04/05 22:13
akasan:http://codepad.org/9UuiOpiM 附加範例程式 04/05 22:14
akasan:printf 有 Buffer overflow 的潛藏危機就是了 04/05 22:15
softwind:snprintf不能用嗎? 04/05 22:27
akasan:snprintf 印不完的要怎麼處理阿XD? 04/05 22:34
akasan:而且好像是 C++0x 才列入標準? 04/05 22:35
softwind:就ignore阿 總比overflow好吧 不然至少return EOVERFLOW 04/05 22:36
firejox:putchar() XD 04/05 22:52
loveme00835:snprintf在C99裡面, C++要到 n3126才有 :) 04/05 22:53
akasan:哭哭 這個暑假一定要好好 k 一次 c99 標準書 <囧> 04/05 22:56
loveme00835:因為basic_ostream有virtual dtor, 所以繼承下來沒問 04/06 02:47
loveme00835:題, 加上buffer給一個空指標可造成錯誤旗標被升起, 輸 04/06 02:51
loveme00835:出無效, 想要作出和 a大程式碼相同效果的話可以從變更 04/06 02:52
loveme00835:streambuf著手, 非格式化輸出也會比較好作 04/06 02:54