看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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:##__VA_ARGS__) 05/11 02:17
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