c++ - 为什么在定义为宏值的路径中指定的反斜杠被删除?有没有办法避免这种情况?

标签 c++ visual-studio environment-variables

在我的 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 .

PW未在可识别的转义序列列表中定义,并替换为字符本身,\P给出 P , 与 \W 相同.

\b然而被定义为退格键,现在你得到

C:Program FilesWindows<backspace>lahblah

如果你想保留反斜杠,你必须将它们加倍,例如

C:\\Program Files\\Windows\\blahblah

现在编译器看到 \\并用一个 \ 替换每个.

关于c++ - 为什么在定义为宏值的路径中指定的反斜杠被删除?有没有办法避免这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48783207/

相关文章:

c++ - 如何将参数传递给由注册表启动的 C++ 程序?

c++ - 类型嵌套在模板类中的部分特化

c++ - 以编程方式设置应用程序的播放设备

visual-studio - Visual Studio 2010 "Add Reference"正在将 dll 复制到 bin 目录?

environment-variables - Rails 5.1 加密的 secret RAILS_MASTER_KEY env 变量未被读取

c++ - 用户定义的类型 - 单位、转换

c++ - VS 2005 - 命令行程序崩溃

visual-studio - Visual Studio 2019(本身): Exception Has Been Thrown By The Target of an Invocation

python - 通过 Pipenv 使用 .env 文件修改 PYTHONPATH

postgresql - 使用环境变量配置 sails 应用程序以连接到 Heroku Postgres