Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;用于创建字符串文本的预处理器_C++_C Preprocessor - Fatal编程技术网

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编译,结果很好!