簡體   English   中英

為什么VS C ++中的Path包含正斜杠而不包含反斜杠?

[英]Why Path in VS C++ contains forward slash not backslash?

我有成千上萬個包含正斜杠的文件

#include <this/thread.hpp>

為什么? 原始程序是用VS 2008編寫的。

這會導致致命錯誤C1083

如果我將路徑更改為#include "..\\this\\thread.hpp"它將找到文件

Windows接受正斜杠和反斜杠作為路徑分隔符。 至少從Windows XP開始。

我無法理解,但是我可以猜測正斜杠是在(潛在)可移植性和/或標准合規性的名稱下使用的,因為include指令中的反斜杠在c ++ 03中具有未定義的行為。

c ++ 03§2.8/ 2:

如果字符'或\\或字符序列/ *或//出現在q字符序列或h字符序列中,或者字符“出現在h字符序列中,行為是不確定的。

根據草案,措辭在c ++ 11中進行了更改。 該行為不再是未定義的,而是仍然定義為實現。

c ++ 11草案§2.9/ 2

實現定義的語義有條件地支持q-char序列或h-char序列中字符'或\\或字符序列/ *或//的出現,以及實現定義的語義的條件支持。 h字符序列中的字符“。

關於您的錯誤:

如果我將路徑更改為#include“ .. \\ this \\ thread.hpp”,它將找到文件

請密切注意您的兩個不同的include指令。 比路徑分隔符有更多區別。 首先,正斜杠版本不引用父路徑( ../ ),其次,路徑包含在< > ,在這種情況下是錯誤的,因為看起來該路徑是相對於當前文件的。 有關更多詳細信息,請參見https://stackoverflow.com/a/21594/2079303

錯誤C1083是“無法打開包含文件”,這通常意味着編譯器找不到該文件。

#include <this/thread.hpp>

您的包含目錄路徑中的任何位置都有一個名為“ this ”的目錄嗎? 與正斜杠相比,這更可能是問題所在。

盡管不是C ++特有的,但至少在<...>標記中時,它是使用\\的轉義字符,因此,如果您確實想將其指定為路徑分隔符,則需要鍵入\\\\ 為避免每次只想使用一種類型的反斜杠時都使用雙反斜杠,並且由於它的作用方式相同,因此,如果僅使用/ ,則可以應用相同的功能來指定文件夾之間的路徑分隔。 這種簡單性減少了對不懂轉義的人的困惑,因此他們不會從字面上理解轉義的路徑,而是將其放入資源管理器地址欄中,並且在未將其帶到正確的位置時會感到困惑。

請注意,如果它需要<...>標記,則您將指定一個系統文件,而"..."語句將包含本地生成的文件。 這些語法的轉義要求不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM