【问题标题】:Is it possible to use a constant in the replacement sequence of macro substitution是否可以在宏替换的替换序列中使用常量
【发布时间】:2023-03-04 12:55:01
【问题描述】:

在对象类型宏中可以在下面,

#define str "this is a string"

我想知道是否可以在函数类型宏中使用这种类型的字符串文字,如下所示,

#define mkstr(a) #a
#define str(s1,s2) mkstr(s1 ## s2 ## "extra")

我运行它并得到错误,现在我想知道有没有办法在函数类型宏的替换序列中使用常量???

【问题讨论】:

    标签: c string macros c-preprocessor


    【解决方案1】:

    是的。只需将字符串放在一起:C 语言接受它作为字符串常量连接。

    #define str(s1,s2)   s1 s2 "extra"
    

    【讨论】:

      【解决方案2】:

      我在您的示例中看到一个问题,即您有两次 #defined str:

      #define str "this is a string"
      #define mkstr(a) #a
      #define str(s1,s2) mkstr(s1 ## s2 ## "extra")
      

      尝试将其更改为:

      #define str_const "this is a string"
      #define str(s1,s2) s1 s2 "extra")
      

      那我想你会更清楚。如果您想创建一个看起来像 this is a string extra 的字符串,那么这里是使用上述宏执行此操作的宏。

      #define str(s1) str_const "extra"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-13
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多