如何在 VC 2005 (C++) 中从命令行定义字符串预处理器?

问题描述 投票:0回答:5

文档告诉我,

/D
命令行开关可用于执行此操作,如下所示:

  CL /DDEBUG TEST.C

这将定义一个调试符号,并且

  CL /DDEBUG=2 TEST.C

会给它值 2。

但是,如果我想获得字符串定义的等效项,如下所示,我该怎么办?

  #define DEBUG "abc"
c++ visual-c++ command-line c-preprocessor
5个回答
6
投票

由于 Windows 中命令行的解析方式,您必须转义引号。

CL /DDEBUG=\"abc\" TEST.C

2
投票

这在 VS2013 中对我有用:

/D_STRING="\"abc\""

那么就相当于

#define _STRING "abc"

请注意,如果你这样做

/D_STRING="abc"

这将相当于

#define _STRING abc

1
投票

谢谢 Glen,第二个可以在命令行上工作,但我要求的同事最终在项目定义中使用了它(需要转义双引号并将 = 替换为 #):

/DDEBUG#\"abc\"

1
投票

尝试:

CL /DDEBUG=abc TEST.C

CL /DDEBUG="abc" TEST.C

-1
投票

我没有 VC 来为你测试这个,但是,原则上以下应该可行:

CL /DSTRINGIFY(X)=#X /DDEBUG=STRINGIFY(abc) TEST.C

更新:

正如 Kuber-Ober 所强调的那样,VC 在这里似乎没有做正确的事情。用一个简单的例子进行测试,它会生成:

const char * s = STRINGIFY(abc);

它可以与其他编译器一起使用,例如以下 g++ 命令行可以工作:

g++ -D'STRINGIFY(X)=#X' -D'DEBUG=STRINGIFY(abc)' t.cc -E

# 1 "t.cc"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "t.cc"

const char * s = "abc";
© www.soinside.com 2019 - 2024. All rights reserved.