Joh*_*ohn 3 c macros string-concatenation c-preprocessor
在预处理器宏中连接C/C++ 的方法是使用##.stringify的方法是使用#.我正在尝试连接和字符串化.这是从g ++(3.3.2)产生警告
#define TOKENPASTE(x, y) x ## y
#define TOKENPASTE2(x, y) TOKENPASTE(x, y) // concat
#define TOKENPASTE3(x, y) TOKENPASTE(#x, #y) // concat-stringify (warnings)
const char* s = TOKENPASTE3(Hi, There)
Run Code Online (Sandbox Code Playgroud)
得到警告是不可接受的
"test_utils/test_registration.h:34:38:警告:粘贴""嗨""和""那里""没有给出有效的预处理令牌"
虽然(使用-E选项)我看到它生成:
const char* s = "Hi""There";
Run Code Online (Sandbox Code Playgroud)
哪个看起来对我来说.
任何帮助将不胜感激.
小智 6
预处理器已经连接了相邻的字符串文字.所以你的宏是不必要的.例:
#define TOKENPASTE3(x, y) #x #y
const char* s = TOKENPASTE3(Hi, There);
Run Code Online (Sandbox Code Playgroud)
成为"Hi" "There".但是,如果您想坚持使用您的方法,则需要使用额外的间接级别来扩展您的新令牌:
#define STRINGIFY(x) #x
#define TOKENPASTE(x, y) STRINGIFY(x ## y)
Run Code Online (Sandbox Code Playgroud)
成为"HiThere".
| 归档时间: |
|
| 查看次数: |
6361 次 |
| 最近记录: |