__FILE__顯示全路徑的問題

在日誌中,使用到__FILE__來顯示源碼的文件名,可它顯示了絕對路徑,這樣使得整個log看起來很長,主要log都顯示在了右邊,讓人看着非常不舒服。查找了半天才知道這是編譯形成的,因爲編譯目錄和源碼目錄不一樣,因此在實際編譯的時候使用的是源碼的絕對路徑,以至打印出來就是絕對路徑了(這樣的解釋不是很準確,有待改進)。測試

針對這種現象,使用如下的例子做爲測試。日誌

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("%s, %d\n", __FILE__, __LINE__);

    return 0;
}

使用源碼的全路徑編譯:code

$ gcc -o filetest /srv/example/c/test/filetest.c

執行結果:源碼

$ ./filetest 
/srv/example/c/test/filetest.c, 5

爲了解決以上問題,固然能夠改變編譯的方式:string

$ gcc -o filetest filetest.c

執行結果:io

$ ./filetest 
filetest.c, 5


可對項目而言,改動一下會牽動不少的東西,那麼能夠對__FILE__進行一些操做:編譯

#define __FILENAME__ (strrchr(__FILE__, '/') ? (strrchr(__FILE__, '/') + 1):__FILE__)

測試代碼修改以下:test

#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;
}

執行結果:gcc

$ ./filetest 
filetest.c, 8

考慮到以上的操做須要兩次執行strrchr,這種方案也被槍斃掉了。最後採起了換行的操做,只是使用腳本去分析log文件時有很大的不便,不能快速定位到哪一個文件,畢竟它們顯示在不一樣行上。file

相關文章
相關標籤/搜索