我想像这样通过/D定义将MSVC++ 2008宏传递到我的程序中

/D__HOME__="\"$(InputDir)\""

然后在我的程序中我可以做到这一点
cout << "__HOME__ => " << __HOME__ << endl;

应该打印类似
__HOME__ => c:\mySource\Directory

但是它不喜欢反斜杠,所以我实际上得到了:
__HOME__ => c:mySourceDirectory

关于如何使它起作用的任何想法?

更新:我终于可以用下面的Tony回答来解决这个问题,但请注意$(InputDir)包含尾随反斜杠,因此实际的宏定义必须有一个额外的反斜杠来处理它……如果我看到了,那就是黑客!
/D__HOME__="\"$(InputDir)\\""

最佳答案

您可以通过在宏前面加上字符串化运算符#来将宏转换为字符串。但是,这仅适用于宏。实际上,您需要一个双宏才能使其正常工作,否则它将只打印__HOME__

#define STRINGIZE2(x) #x
#define STRINGIZE(x) STRINGIZE2(x)
cout<< "__HOME__ => " << STRINGIZE(__HOME__) << endl;

附带地,包含双下划线的宏保留给C++实现,不应在程序中使用。

10-04 15:09