【问题标题】:What does "#" mean before a macro? [duplicate]宏前的“#”是什么意思? [复制]
【发布时间】:2019-03-27 14:47:16
【问题描述】:

我需要一些关于这段代码的解释

#define TRACE_PRINT5 (F, X)   fprintf(stderr, "%s" STRGY(__LINE__) ":(" #X "): ", X);

我知道#开头是什么,但我不明白":(" #X"): "是什么

【问题讨论】:

    标签: c


    【解决方案1】:

    这叫"stringizing";当您添加# 时,宏会将参数视为字符串(例如,获取传入事物的名称,而不是值。)

    例如,如果你写:

    const char* someString = "abc";
    TRACE_PRINT5(something, someString); // let's assume this is on line 10 for __LINE__
    

    这应该扩展为:

    const char* someString = "abc";
    fprintf(stderr, "%s" "10" ":(" "someString" "): ", "abc");
    

    (假设STRGY 宏只是将其参数转换为字符串。)

    【讨论】:

      【解决方案2】:

      当您将# 放在宏中的某个内容之前时,它会以字符串文字的形式获取值。

      在您的情况下,将 X 作为字符串文字。 这意味着如果你传递变量age 类型为int 它将传递把“年龄”放在#X 的位置

      【讨论】:

        猜你喜欢
        • 2019-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-22
        • 2019-09-12
        • 2015-01-22
        相关资源
        最近更新 更多