Sid*_*tta 5 c macros c-strings stringification c-preprocessor
我有一个常量定义:
#define MAX_STR_LEN 100
Run Code Online (Sandbox Code Playgroud)
我想这样做:
scanf("%" MAX_STR_LEN "s", p_buf);
Run Code Online (Sandbox Code Playgroud)
但当然这不起作用.
可以使用什么预处理器技巧将MAX_STR_LEN数字转换为字符串,以便我可以在上面的scanf调用中使用它?基本上:
scanf("%" XYZ(MAX_STR_LEN) "s", p_buf);
Run Code Online (Sandbox Code Playgroud)
XYZ()应该是什么?
注意:我当然可以直接做"%100s",但这样做会失败.我也可以#define MAX_STR_LEN_STR"100",但我希望有一个更优雅的解决方案.
Jam*_*lis 18
使用#预处理运算符.此运算符仅在宏扩展期间有效,因此您需要一些宏来帮助.此外,由于宏替换算法固有的特殊性,您需要一层间接.结果如下:
#define STRINGIZE_(x) #x
#define STRINGIZE(x) STRINGIZE_(x)
scanf("%" STRINGIZE(MAX_STR_LEN) "s", p_buf);
Run Code Online (Sandbox Code Playgroud)