【发布时间】:2024-04-25 19:35:01
【问题描述】:
在 Windows 下,我有一个包含 Windows 样式路径的环境变量。我想将该路径构建到我的程序中并将其打印出来。所以如果我的路径是 c:\top,我会使用 -DTOP=$(TOP) 将它传递给编译器。请注意,在将其传递给编译器之前,我无法将其转换为 c:\\top。
现在,我有相当于:
#define TOP=c:\top
我想要相当于:
char path[]="c:\\top";
我不能只使用字符串化操作符:
#define WRAP1(X) #X
#define WRAP(X) WRAP1(X)
char path[] = WRAP(TOP);
这只会导致编译器将其视为转义序列(即 \t)的字符串“c:\top”。
我认为一个可能的解决方案是构造一个字符串文字,但其他解决方案也可以。有没有办法使用宏来构造会产生的字符串文字:
char path[] = R"foo(c:\top)foo";
到目前为止,我所有的尝试都失败了,原因涉及 " 或 ( ) 或 \ 的变体。
谢谢。
【问题讨论】:
-
"请注意,在将其传递给编译器之前,我无法将其转换为 c:\\top" - 为什么?
-
为什么不改为
-DTOP=R"foo($(TOP))foo"?编辑:引号可能需要转义,因为这是一个命令行选项,如下所示:-DTOP="R""foo($(TOP))foo""" -
我处于无法更改的自定义编译环境中。当我指定 -D 时,我不能使用额外的引号。编译环境也使用引号来解析编译器的附加参数。
-
你试过用正斜杠代替反斜杠吗?
-
正确的答案是通知构建环境人员/团队您需要更改它。不要害怕“它无法完成”的场景,并在它损坏的地方修复它 - 即无法引用任何内容,或在命令行上更改任何内容!疯了!
标签: c++ c path string-formatting compiler-options