__FILE__顯示全路徑的問題
阿新 • • 發佈:2019-01-09
https://segmentfault.com/a/1190000000600442
在日誌中,使用到__FILE__
來顯示原始碼的檔名,可它顯示了絕對路徑,這樣使得整個log看起來很長,主要log都顯示在了右邊,讓人看著很是不舒服。查找了半天才知道這是編譯造成的,由於編譯目錄和原始碼目錄不同,所以在實際編譯的時候使用的是原始碼的絕對路徑,以致打印出來就是絕對路徑了(這樣的解釋不是很準確,有待改進)。
針對這種現象,使用以下的例子作為測試。
#include <stdio.h>
int main(int argc, char **argv)
{
printf("%s, %d\n", __FILE__, __LINE__);
return 0;
}
使用原始碼的全路徑編譯:
$ gcc -o filetest /srv/example/c/test/filetest.c
執行結果:
$ ./filetest
/srv/example/c/test/filetest.c, 5
為了解決以上問題,當然可以改變編譯的方式:
$ gcc -o filetest filetest.c
執行結果:
$ ./filetest
filetest.c, 5
可對專案而言,改動一下會牽動很多的東西,那麼可以對__FILE__
進行一些操作:
#define __FILENAME__ (strrchr(__FILE__, '/') ? (strrchr(__FILE__, '/') + 1 ):__FILE__)
測試程式碼修改如下:
#include <string.h>
#include <stdio.h>
#define __FILENAME__ (strrchr(__FILE__, '/') ? (strrchr(__FILE__, '/') + 1):__FILE__)
int main(int argc, char **argv)
{
printf("%s, %d\n", __FILENAME__, __LINE__);
return 0;
}
執行結果:
$ ./filetest
filetest.c, 8
考慮到以上的操作需要兩次執行strrchr