首页 > 解决方案 > 如何在宏函数中增加数字并转换为字符串?

问题描述

// it return "192.168.123.num"
#define GET_SLAVE(num) "192.168.123."#num

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

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

我怎样才能做到?还是在宏功能中不可能?

标签: c

解决方案


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

#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_X_ADD2_##num##_。现在你可以做

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

推荐阅读