C++预处理器能否判断令牌是否为字符串

Can the C++ preprocessor tell whether a token is a string?

本文关键字:令牌 是否 字符串 判断 预处理 处理器 C++      更新时间:2023-10-16

预处理器宏是否可以确定其参数是否为字符串(文字)?

例如:

#define IS_STRING(token) ???
IS_STRING("foo")  // expands to 1
IS_STRING(foo)    // expands to 0

是。但输出略有差异:

#define IS_STRING(token) "" token 

字符串文字会很好。对于非字符串,它将给出编译器错误。

逻辑:编译器会自动连接字符串文字,因此如果token是字符串文字,则"" token会正常工作。

这是一个相关的讨论。