[問題] C++用marco debug的寫法

看板C_and_CPP作者 (嘰咕嘰咕嘰咕)時間13年前 (2011/04/05 20:53), 編輯推噓3(3023)
留言26則, 7人參與, 最新討論串1/4 (看更多)
開發平台(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

04/05 21:01, , 1F
可以弄一個 null object 來實作 nop
04/05 21:01, 1F

04/05 21:02, , 2F
我猜原 po 是希望完全不要有 runtime overhead..
04/05 21:02, 2F

04/05 21:03, , 3F
嗯…fprintf這一類的長的很漂亮啊,為什麼一定要弄成另一個
04/05 21:03, 3F

04/05 21:03, , 4F
樣子呢?
04/05 21:03, 4F

04/05 21:03, , 5F
或是寫一個函式把 arg... wrap 給 cerr
04/05 21:03, 5F

04/05 21:03, , 6F
對喔 1F沒錯 的確也可以沒有overhead @@
04/05 21:03, 6F

04/05 21:04, , 7F
aecho printf 系列沒有型別檢查
04/05 21:04, 7F

04/05 21:06, , 8F
第二種方式很美阿 ._. 你把它當函式呼叫當然醜
04/05 21:06, 8F

04/05 21:19, , 9F
... Android logcat方式
04/05 21:19, 9F

04/05 21:54, , 10F
這個試試 http://codepad.org/01X9EC9w 合法與否還要
04/05 21:54, 10F

04/05 21:55, , 11F
查證一下
04/05 21:55, 11F

04/05 21:58, , 12F
LOGE("error %d,%s", errno, strerror(errno) ); 不好看?
04/05 21:58, 12F

04/05 22:13, , 13F
http://codepad.org/vqRQ60ZZ 之前寫的 拿去參考看看吧XD
04/05 22:13, 13F

04/05 22:14, , 14F
http://codepad.org/9UuiOpiM 附加範例程式
04/05 22:14, 14F

04/05 22:15, , 15F
printf 有 Buffer overflow 的潛藏危機就是了
04/05 22:15, 15F

04/05 22:27, , 16F
snprintf不能用嗎?
04/05 22:27, 16F

04/05 22:34, , 17F
snprintf 印不完的要怎麼處理阿XD?
04/05 22:34, 17F

04/05 22:35, , 18F
而且好像是 C++0x 才列入標準?
04/05 22:35, 18F

04/05 22:36, , 19F
就ignore阿 總比overflow好吧 不然至少return EOVERFLOW
04/05 22:36, 19F

04/05 22:52, , 20F
putchar() XD
04/05 22:52, 20F

04/05 22:53, , 21F
snprintf在C99裡面, C++要到 n3126才有 :)
04/05 22:53, 21F

04/05 22:56, , 22F
哭哭 這個暑假一定要好好 k 一次 c99 標準書 <囧>
04/05 22:56, 22F

04/06 02:47, , 23F
因為basic_ostream有virtual dtor, 所以繼承下來沒問
04/06 02:47, 23F

04/06 02:51, , 24F
題, 加上buffer給一個空指標可造成錯誤旗標被升起, 輸
04/06 02:51, 24F

04/06 02:52, , 25F
出無效, 想要作出和 a大程式碼相同效果的話可以從變更
04/06 02:52, 25F

04/06 02:54, , 26F
streambuf著手, 非格式化輸出也會比較好作
04/06 02:54, 26F
文章代碼(AID): #1Dcn3Y5O (C_and_CPP)
文章代碼(AID): #1Dcn3Y5O (C_and_CPP)