【发布时间】:2014-07-02 10:35:19
【问题描述】:
我需要做类似的事情:
#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;
}
但是预处理器有问题
allocator.cpp:24:21: 错误:粘贴 "u" 和 ""good"" 不会给出有效的预处理令牌
【问题讨论】:
-
您使用的是
gcc或clang的哪个版本?在coliru.stacked-crooked.com为我工作 -
另外,你用的是什么模式?
u""字符串字面量是 C++11 中的新内容,因此代码自然不会在 C++03 模式下工作。 -
看起来您正在使用
g++进行编译,但没有提供-std=c++11选项。 -
@MattClarkson 使用的版本是:g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
-
@JosephMansfield 。我用 -std=c++11 编译,一切正常!
标签: c++ c-preprocessor