error: expected ‘)’ before numeric constant

一: 问题产生原因

        今天在码代码的时候,遇到了很多重复的短小的语句。就想着使用Macro替换。这样在代码看来整洁,短小。可是很奇葩的一件事就是怎么将数字和字符串拼接在一起。参照了之前的前辈们的代码,然后就遇到了题目所示的特奇葩的错误。

二:调试过程

     在度娘中游了一遍,只是在StackFlow上看了一篇,但是最终也没有给出错误的原因。无聊的将预编译的代码打印出来看了一下,如果传入的不是直接的字符串(“”),就会出现下面的情况



      只要你使用非直接的“ String ”的形式,就会在编译的时候报上面的错误。这其实和Macro的预编译替换有着直接的关系,他不会将参数的值带到里面去,故而导致了这样的编译错误。

三:解决的结果
     解决的办法就是如果你使用的宏需要用到整数型,只要在前面加上个#--hash 符号就可以(这是旁边老司机教我的)。不必要将整数类型转换成字符。就可以达到要求。下面是测试的预编译结果:

从两张图的预编译结果可以明显看出来,后面才是我们使用宏的时候想要的结果。

四:下面给出自己的一些定义类型,供参考

/* Define the four lights num */
#define FIRST_LIGHT_NUM  113
#define FOURTH_LIGHT_NUM  120
#define SECOND_RED_LIGTH_NUM  16
#define SECOND_GREEN_LIGTH_NUM  121
#define THIRD_RED_LIGTH_NUM  157
#define THIRD_GREEN_LIGHT_NUM  29

#define OFF_OR_ENABLE 1
#define ON_OP_ENABLE 0

/* Macro define */
#define STRING_CREATEGPIO(GpioNum)  "echo "#GpioNum" > /sys/class/gpio/export"
#define STRING_SETOUTGPIO(GpioNum)  "echo \"out\" > /sys/class/gpio/gpio"#GpioNum"/direction"
#define STRING_SETOFFORON(GpioNum, Switch)  "echo "#Switch" > /sys/class/gpio/gpio"#GpioNum"/value"

/* Initial the GpioNum */
#define CHANGE_LIGHT_OFF_ON(GpioNum, Switch) \
	system(STRING_SETOFFORON(GpioNum, Switch)); \

/* Initial the GpioNum */
#define PREPARE_LIGHT_ACTIVE(GpioNum) \
	system(STRING_CREATEGPIO(GpioNum)); \
	system(STRING_SETOUTGPIO(GpioNum)); \

这里可以看到在使用#读取变量的值放到字符串中去。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值