【问题标题】:Converting a #defined constant number to a string将#defined 常量转换为字符串
【发布时间】:2012-09-20 20:50:47
【问题描述】:

我定义了一个常量:

#define MAX_STR_LEN 100

我正在尝试这样做:

scanf("%" MAX_STR_LEN "s", p_buf);

但这当然行不通。

可以使用什么预处理器技巧将 MAX_STR_LEN 数字转换为字符串,以便我可以在上面的 scanf 调用中使用它?基本上:

scanf("%" XYZ(MAX_STR_LEN) "s", p_buf);

XYZ() 应该是什么?

注意:我当然可以直接执行“%100s”,但这违背了目的。我也可以 #define MAX_STR_LEN_STR "100",但我希望有一个更优雅的解决方案。

【问题讨论】:

标签: c macros c-preprocessor c-strings stringification


【解决方案1】:

使用# 预处理运算符。此运算符仅在宏扩展期间有效,因此您需要一些宏来帮助。此外,由于宏替换算法固有的特性,您需要一个间接层。结果如下所示:

#define STRINGIZE_(x) #x
#define STRINGIZE(x) STRINGIZE_(x)

scanf("%" STRINGIZE(MAX_STR_LEN) "s", p_buf);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    相关资源
    最近更新 更多