C++ C++;用于创建字符串文本的预处理器
我需要做一些事情,比如:C++ C++;用于创建字符串文本的预处理器,c++,c-preprocessor,C++,C Preprocessor,我需要做一些事情,比如: #define charSz 16 #if charSz == 8 typedef char8_t Char; #define STR(s) #s #elif charSz == 16 typedef char16_t Char; #define STR(s) u ## #s #elif charSz == 32 typedef char32_t Char; #define STR(s) U ## #s #endif
#define charSz 16
#if charSz == 8
typedef char8_t Char;
#define STR(s) #s
#elif charSz == 16
typedef char16_t Char;
#define STR(s) u ## #s
#elif charSz == 32
typedef char32_t Char;
#define STR(s) U ## #s
#endif
#include <string>
typedef std::basic_string< Char > String;
int main(){
String s=STR(nice) ;
String t=STR(very nice) ;
String u=STR(good) ;
return 0;
}
#定义charSz 16
#如果charSz==8
typedef char8_t Char;
#定义STR(s)#s
#elif charSz==16
typedef char16_t Char;
#定义STR(s)u###s
#elif charSz==32
typedef char32_t Char;
#定义STR(s)U###s
#恩迪夫
#包括
typedef std::basic_stringstring;
int main(){
字符串s=STR(nice);
字符串t=STR(非常好);
字符串u=STR(良好);
返回0;
}
但是预处理器的问题
分配器.cpp:24:21:错误:粘贴“u”和“good”不会提供有效的预处理令牌
<> > <代码> u”/> >代码> u > 字符串文字是C++ 11,以后仅在旧版本的C++中不支持,
如果您的编译器支持C++11且您的项目允许使用它,则启用C++11编译(例如,使用-std=C++11
开关启用g++和clang++)
否则,你就不走运了。较旧的
L”“
不是UTF-16字符串的合适替代品,而且根本没有任何32位宽的字符串文字。您使用的是什么版本的gcc
或clang
?也适用于我,您使用的是什么模式u”“
字符串文字在C++11中是新的,因此该代码自然无法在C++03模式下工作。看起来您使用的是g++
编译,而没有给出-std=C++11
选项。@MattClarkson使用的版本是:g++(Ubuntu 4.8.2-19ubuntu1)4.8。2@JosephMansfield . 我用-std=c++11编译,结果很好!