[問題] 結合##和_func_,_FILE_和_LINE_來debug

看板C_and_CPP作者 ((((((((((()))))))))))時間13年前 (2012/05/10 15:02), 編輯推噓1(1011)
留言12則, 4人參與, 最新討論串1/2 (看更多)
開發平台(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

05/10 16:34, , 1F
只要對__LINE__展開就好吧
05/10 16:34, 1F

05/10 17:02, , 2F
XD __LINE__ 是 integer literal 呀
05/10 17:02, 2F

05/10 17:46, , 3F
話說回來__func__是 char[] 好像也不能在#define 這樣玩
05/10 17:46, 3F

05/10 22:40, , 4F
__func__ 沒有每個 compiler 都支援吧
05/10 22:40, 4F

05/11 02:16, , 5F
這樣感覺好複雜..分享我自己在用的 #define DBG(fmt,...) \
05/11 02:16, 5F

05/11 02:16, , 6F
printf("%s %s:%d "fmt,__FILE__,__func__,__LINE__,##__VA_
05/11 02:16, 6F

05/11 02:16, , 7F
...推文被切掉了XD
05/11 02:16, 7F

05/11 02:17, , 8F
05/11 02:17, 8F

05/11 02:18, , 9F
使用時照一般 printf 的方式使用就好
05/11 02:18, 9F

05/11 02:19, , 10F
我實際使用的會寫成 fprintf(stderr, ... 後面差不多
05/11 02:19, 10F

05/11 02:21, , 11F
不過只是要 trace code 的話,簡單用 cflow 跑一下也許夠用
05/11 02:21, 11F

05/11 02:22, , 12F
需要看 runtime 部份再掛 gdb 或其它工具吧
05/11 02:22, 12F
文章代碼(AID): #1FgsWY8a (C_and_CPP)
文章代碼(AID): #1FgsWY8a (C_and_CPP)