作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的 Visual Studio 应用程序中,我在 C/C++ -> 预处理器 -> 预处理器定义下的项目属性中定义了一个预处理器宏 SDK_INC。
宏定义如下:
SDK_INC=$(WindowsSDK_IncludePath)
然后在我的代码中,我像这样访问 SDK 包含路径:
#define STRINGIZE(x) #x
#define STR_VALUE(x) STRINGIZE(x)
char sdkPath[1000] = STR_VALUE(SDK_INC);
但是,在调试时,我发现从宏中获取的路径已删除所有反斜杠。我发现这个问题本身并不是特定于 $(WindowsSDK_IncludePath) 的,但它是一个普遍的问题,它与任何有反斜杠的东西有关。即即使我直接定义宏而不使用 $(WindowsSDK_IncludePath) 像这样:
SDK_INC=C:\Program Files...blahblah
在运行时获取的路径仍将删除反斜杠。
关于为什么它会这样运行以及应该如何获得没有删除任何反斜杠的路径的任何见解?
最佳答案
在 C++ 中,包含反斜杠的字符串将被处理为 Escape sequences ,即编译器查找反斜杠 \
后跟一个已知字符。
这意味着像 C:\Program Files\Windows\blahblah
这样的路径会看到\P
, \W
和 \b
.
P
和 W
未在可识别的转义序列列表中定义,并替换为字符本身,\P
给出 P
, 与 \W
相同.
\b
然而被定义为退格键,现在你得到
C:Program FilesWindows<backspace>lahblah
如果你想保留反斜杠,你必须将它们加倍,例如
C:\\Program Files\\Windows\\blahblah
现在编译器看到 \\
并用一个 \
替换每个.
关于c++ - 为什么在定义为宏值的路径中指定的反斜杠被删除?有没有办法避免这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48783207/
我是一名优秀的程序员,十分优秀!