在“<text>”之后无法识别 C++ #define 预处理器指令

Posted

技术标签:

【中文标题】在“<text>”之后无法识别 C++ #define 预处理器指令【英文标题】:C++ #define preprocessor directive is not recognized after "<text>" 【发布时间】:2016-02-14 21:42:09 【问题描述】:

我在 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 引擎。我没有对原代码做任何修改,只是想解决下载源的错误。

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

感谢您的帮助, 萨纳普奇

【问题讨论】:

无法重现此错误:ideone.com/FF6nTx 也许宏和字符串之间的空格会有所帮助? 嗯,是的,空格也是一种解决方案。 :) 我怎么忘记试试这个.. 谢谢。在我的问题中忘记发布错误代码:Severity Code Description Project File Line Error C3688 invalid literal suffix 'S_COLOR_RED'; literal operator or literal operator template 'operator ""S_COLOR_RED' not found idLib C:\Users\sanap\Desktop\TTimo-doom3.gpl-1559777\neo\idlib\math\Simd.cpp 1501 【参考方案1】:

试试:

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

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

【讨论】:

是的,在 Anedar 发表评论后,我尝试了这种方法并奏效了。 :) 也感谢您的回答,但我想它曾经以这种形式工作并且不知道为什么会发生。

以上是关于在“<text>”之后无法识别 C++ #define 预处理器指令的主要内容,如果未能解决你的问题,请参考以下文章

无法识别 C++ CreateProcess 'telnet'

为啥我的 DirectX 程序无法识别我已经释放了转义键? (C++)

CodeLite 无法识别任何 c++ 代码

c++程序中,无法识别中文路径怎么办

如何在 React Native 中使 2 个 <Text> 内联

使用 SWIG 围绕 C++ 的 Python 包装器。参数类型无法识别