前往
大廳
主題

C在編譯時帶入的變數,補充不同平台之間的路徑問題

Yang | 2023-02-12 23:31:25 | 巴幣 0 | 人氣 177

斜線/

反斜線\,在C/C++/C#等語言中通常要加上跳脫字元才能呈現,就是原始碼字串上寫"\\",會輸出\,
但是我在windows上使用MinGW測試出不同情況,還不清楚原因?紀錄如下


檔案路徑的呈現,目前只找到只有windows是以\作為分隔符,其他平台都是以/作分隔

但測試發現windows平台輸入上支援/,譬如:
C:\Windows\SysWOW64\notepad.exe
C:/Windows/SysWOW64/notepad.exe
C:\Windows/SysWOW64\notepad.exe
C:\Windows\SysWOW64/notepad.exe
都能啟動筆記本

深入追查,MinGW專案,在windows平台,路徑也是寫/,譬如:
#include <sys/timeb.h>
#include <sys/types.h>

自行寫程式測試,輸出前一篇寫的__FILE__路徑:
static const int GetFilePath(char *buffer)
{
    return sprintf(buffer, "%s", __FILE__);
}

測試1:
#include "Tools/Functions.h"

測試1結果:
"\Tools/Functions.h"

測試2:
#include "Tools\Functions.h"

測試2結果:
"\Tools\Functions.h"

測試3:
#include "Tools\\Functions.h"

測試3結果:
"\tools\functions.h"

本來以為測試2會無法編譯,因為只有一個\,結果正常編譯正常輸出

本來以為測試3會輸出測試2的結果,卻變成輸出全小寫的路徑,原因不明?

結論,在其他平台以/作為路徑分隔符,但windows平台不確定,先模仿MinGW,
但也要針對讀寫檔情況再補充更多測試,避免又出現其他非預期的情況
送禮物贊助創作者 !
0
留言

創作回應

更多創作