【问题标题】:How to increase number and convert to string in macro function?如何在宏函数中增加数字并转换为字符串?
【发布时间】:2021-08-23 02:40:13
【问题描述】:
// it return "192.168.123.num"
#define GET_SLAVE(num) "192.168.123."#num

但是,我想获得数字增加的字符串。

例如)GET_SLAVE(2) --> "192.168.123.4"

我该怎么做? 或者在宏功能中是不可能的?

【问题讨论】:

  • 你在写 C 还是 C++?请不要同时标记两者。 C++ 中的答案很可能涉及std::string,一个重载的+ 运算符,以及一个建议看一下constexpr,这些在C 中都不存在。
  • @SilvioMayolo 谢谢你的回答,我编辑我的问题。
  • 顺便问一下,您能否详细说明添加应该如何工作?它总是加 2 吗?
  • 在我的情况下,它总是被提升2。当然,它可以用正常的功能实现这个功能。但是,我想知道这是否可能。如果可能的话,它会让我的代码变得简单。

标签: c


【解决方案1】:

您可以使用一些宏魔法来实现这一点,但它看起来并不是最好的:

#define GET_SLAVE(num) "192.168.123."ADD2_##num##_

#define ADD2_0_ "2"
#define ADD2_1_ "3"
#define ADD2_2_ "4"
#define ADD2_3_ "5"
#define ADD2_4_ "6"
#define ADD2_5_ "7"
#define ADD2_6_ "8"
#define ADD2_7_ "9"
#define ADD2_8_ "10"
#define ADD2_9_ "11"
#define ADD2_10_ "12"
#define ADD2_11_ "13"
#define ADD2_12_ "14"
#define ADD2_13_ "15"
#define ADD2_14_ "16"
#define ADD2_15_ "17"
#define ADD2_16_ "18"
#define ADD2_17_ "19"
#define ADD2_18_ "20"
#define ADD2_19_ "21"
#define ADD2_20_ "22"
#define ADD2_21_ "23"
#define ADD2_22_ "24"
#define ADD2_23_ "25"
#define ADD2_24_ "26"
#define ADD2_25_ "27"
#define ADD2_26_ "28"
#define ADD2_27_ "29"
#define ADD2_28_ "30"
#define ADD2_29_ "31"
#define ADD2_30_ "32"
#define ADD2_31_ "33"
#define ADD2_32_ "34"
#define ADD2_33_ "35"
#define ADD2_34_ "36"
#define ADD2_35_ "37"
#define ADD2_36_ "38"
#define ADD2_37_ "39"
#define ADD2_38_ "40"
#define ADD2_39_ "41"
#define ADD2_40_ "42"
#define ADD2_41_ "43"
#define ADD2_42_ "44"
#define ADD2_43_ "45"
#define ADD2_44_ "46"
#define ADD2_45_ "47"
#define ADD2_46_ "48"
#define ADD2_47_ "49"
#define ADD2_48_ "50"
#define ADD2_49_ "51"
#define ADD2_50_ "52"
#define ADD2_51_ "53"
#define ADD2_52_ "54"
#define ADD2_53_ "55"
#define ADD2_54_ "56"
#define ADD2_55_ "57"
#define ADD2_56_ "58"
#define ADD2_57_ "59"
#define ADD2_58_ "60"
#define ADD2_59_ "61"
#define ADD2_60_ "62"
#define ADD2_61_ "63"
#define ADD2_62_ "64"
#define ADD2_63_ "65"
#define ADD2_64_ "66"
#define ADD2_65_ "67"
#define ADD2_66_ "68"
#define ADD2_67_ "69"
#define ADD2_68_ "70"
#define ADD2_69_ "71"
#define ADD2_70_ "72"
#define ADD2_71_ "73"
#define ADD2_72_ "74"
#define ADD2_73_ "75"
#define ADD2_74_ "76"
#define ADD2_75_ "77"
#define ADD2_76_ "78"
#define ADD2_77_ "79"
#define ADD2_78_ "80"
#define ADD2_79_ "81"
#define ADD2_80_ "82"
#define ADD2_81_ "83"
#define ADD2_82_ "84"
#define ADD2_83_ "85"
#define ADD2_84_ "86"
#define ADD2_85_ "87"
#define ADD2_86_ "88"
#define ADD2_87_ "89"
#define ADD2_88_ "90"
#define ADD2_89_ "91"
#define ADD2_90_ "92"
#define ADD2_91_ "93"
#define ADD2_92_ "94"
#define ADD2_93_ "95"
#define ADD2_94_ "96"
#define ADD2_95_ "97"
#define ADD2_96_ "98"
#define ADD2_97_ "99"
#define ADD2_98_ "100"
#define ADD2_99_ "101"

我们创建了 100 个宏,适用于 0-99 之间的任意数字(如果需要,您可以制作更多),这些宏扩展为字符串形式的加 2 数字。在我们的GET_SLAVE 宏中,我们使用num 通过ADD2_##num##_ 选择要使用的ADD2_X_ 宏。现在你可以做

puts(GET_SLAVE(2));
// Output: 192.168.123.4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    相关资源
    最近更新 更多