C ++ #define预处理程序指令在“ ”

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

我在MS VS 2015 Enterprise中遇到与C ++有关的问题。

我在\ Str.h中有一个预处理器指令

\\ \Str.h file
Line 96: #define S_COLOR_RED "^1"

并在以下行中使用它:

\\ \math\Simd.cpp file
Line 1501: idLib::common->Printf( "   simd->Memcpy() "S_COLOR_RED"X\n" );
Line 1527: idLib::common->Printf( "   simd->Memset() "S_COLOR_RED"X\n" );

问题是,如果在指令之前有一个“”,C ++想要将它用作用户定义的文字,但实际上它只是一个简单的定义常量。

更改为以下后,它的工作原理:

// \math\Simd.cpp
Line 1527: idLib::common->Printf( "   simd->Memset() "
Line 1527: idLib::common->Printf( S_COLOR_RED"X\n" );

什么可能导致这个?所有功劳都归功于id Tech,因为这些代码来自id Tech 4引擎。我没有对原始代码进行任何修改,只是尝试从下载的源代码中解决错误。

我试图搜索有关此问题的更多信息,但没有结果。

谢谢你的帮助,Sanapci

c++ visual-studio visual-studio-2015 preprocessor-directive
1个回答
1
投票

尝试:

dLib::common->Printf( "   simd->Memcpy() " S_COLOR_RED "X\n");
                                          ^           ^
                                          space between 

如果在它们之间放置一个空格,则字符串文字将连接。

© www.soinside.com 2019 - 2024. All rights reserved.