作者SweepingMonk ((((((((((()))))))))))
看板C_and_CPP
標題[問題] 結合##和_func_,_FILE_和_LINE_來debug
時間Thu May 10 15:02:55 2012
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
none
問題(Question):
我想利用 ##, #, __func__, __FILE__, __LINE__ 來 trace code
希望把 macro 寫在獨立的 .h header 裡面, 然後在 .c 裡面使用如下
debug.h
========================
#define CONCAT_(x, y, z) x ## y ## z
#define CONCAT(x, y, z) CONCAT_(x, y, z)
#define CODE_SEQ \
CONCAT(__func__, __FILE__, __LINE__) // 這些是參考版上
#1CKjm79n
// tinlans 大大的文章
main.c
========================
1 #include "debug.h"
2
3 int main()
4 {
5 printf("%s", CODE_SEQ); // 希望輸出:main main.c 5
6 return 0;
7 }
但是 compile 的時候會出現錯誤:
main.c:5: error: pasting "__func__" and ""main.c""
does not give a valid preprocessing token
main.c:5: error: pasting ""main.c"" and "5"
does not give a valid preprocessing token
請版上高手指點迷津.......<(_._)>
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.238.226
推 cuteclare:只要對__LINE__展開就好吧 05/10 16:34
→ loveme00835:XD __LINE__ 是 integer literal 呀 05/10 17:02
→ cuteclare:話說回來__func__是 char[] 好像也不能在#define 這樣玩 05/10 17:46
→ ykjiang:__func__ 沒有每個 compiler 都支援吧 05/10 22:40
→ letoh:這樣感覺好複雜..分享我自己在用的 #define DBG(fmt,...) \ 05/11 02:16
→ letoh:printf("%s %s:%d "fmt,__FILE__,__func__,__LINE__,##__VA_ 05/11 02:16
→ letoh:...推文被切掉了XD 05/11 02:16
→ letoh:使用時照一般 printf 的方式使用就好 05/11 02:18
→ letoh:我實際使用的會寫成 fprintf(stderr, ... 後面差不多 05/11 02:19
→ letoh:不過只是要 trace code 的話,簡單用 cflow 跑一下也許夠用 05/11 02:21
→ letoh:需要看 runtime 部份再掛 gdb 或其它工具吧 05/11 02:22