2012-03-09 72 views
0

我使用__FILE__宏查看錯誤消息。但是,有時路徑會回到E:\x\y\/z.ext。它爲特定文件執行此操作。__FILE__返回一個帶有「 /」的字符串,路徑爲

例如,E:\programming\v2\wwwindowclass.h返回爲E:\programming\v2\/wwwindowclass.hE:\programming\v2\test.cpp返回爲E:\programming\v2\test.cpp。實際上,目錄中的唯一文件似乎是test.cpp

要解決這個問題,我使用jmucchiello的回答this question用「\」替換任何出現的「/」。這工作得很好,顯示的路徑變成了正常的路徑。

問題是當我在Windows 7上嘗試它(使用XP後)。調用函數後,字符串爲(null)

隨着這個,我有時會得到一些看似隨機的error 2: File not found錯誤。我不確定這是否與此有關,但如果有解釋,我們會很高興聽到。

我試圖找到爲什麼__FILE__會返回錯誤的字符串,但無濟於事。我正在使用GNU g ++ 4.6.1。我實際上並不確定如果XP中錯誤的路徑在Windows 7中也是錯誤的。任何見解都會被讚賞。

+1

它沒有返回錯誤的字符串,它只是這是處理這個問題的許多實現定義的方法之一。通常,東西需要\\正確地轉義\,請閱讀您的操作系統的文檔,瞭解它需要的路徑名稱的方式 – PlasmaHH 2012-03-09 14:54:10

+0

但返回的真正路徑是'E:\\ programming \\ v2 \\/wwwindowclass.h '。我沒有看到使用額外的'/'。爲什麼它會爲大多數文件做這件事,但不是'test.cpp'? – chris 2012-03-09 15:03:38

+0

@chris:通常情況下,編譯器會在您將* #include「v2/wwwindowclass.h」傳遞給編譯器時執行此操作。由於每個文件都有自己的包含語句,因此可以(但不應該)混合這兩種樣式。 – MSalters 2012-03-09 15:27:04

回答

0

按MSalters的評論:

 
Typically, the compiler does so when you pass #include "v2/wwwindowclass.h" to the compiler. 
Since every file has its own include statements, you can (but shouldn't) mix the two styles. 

這是事實。我的編譯器自動添加一個正斜槓。

1

如果沒有更改,鏈接問題中的函數看起來會返回NULL。可能Windows 7不會受到\/問題的困擾(在某些情況下)。

+0

哦,那是我的壞話。我沒有注意到這一點。 – chris 2012-03-09 15:01:34