可变参数宏定义

[复制链接]
1126|13
 楼主| ousj 发表于 2015-8-13 19:04 | 显示全部楼层 |阅读模式
keil c51支持可变参数宏定义吗?
morrisk 发表于 2015-8-13 19:04 | 显示全部楼层
你想做什么
 楼主| ousj 发表于 2015-8-13 19:04 | 显示全部楼层
我对一个byte的指定bit置1的话,我可以宏定义 #define set(byte, bit)   (byte | (1<< bit))
但是如果我对一个byte某一些bit要置1的话呢?
zyf部长 发表于 2015-8-13 19:05 | 显示全部楼层
用宏 #define set(byte, bit1,bit2...)
 楼主| ousj 发表于 2015-8-13 19:05 | 显示全部楼层
我想用这样的方式来操作。可是这种可变参数宏定义不知道如何操作?
小小猫咪 发表于 2015-8-13 19:05 | 显示全部楼层
#define set(byte, bit1,bit2)   (byte|(1<<bit1)|(1<<bit2))
 楼主| ousj 发表于 2015-8-13 19:06 | 显示全部楼层
你这是针对2个参数的可以这样操作,我的意思是后面的参数不确定。可能只有bit1,也可能有bit1,bit2,也可能有bit1,bit2,bit3,bit4.参数可能从1个到8个不等。
kangzj 发表于 2015-8-13 19:06 | 显示全部楼层
嗯,如果确定个数就肯定可以像你那样定义了。
zwll 发表于 2015-8-13 19:07 | 显示全部楼层
好象不行

汇编下可以
 楼主| ousj 发表于 2015-8-13 19:07 | 显示全部楼层
汇编下怎么操作?
chuxh 发表于 2015-8-13 19:07 | 显示全部楼层
我查了keil帮助说明也没有查到,应该是keil c51不支持可变参数宏定义了。
juventus9554 发表于 2015-8-13 19:07 | 显示全部楼层
你可以试试,理论上说宏定义是c语言的事情,和keil c51没关系
司徒老鹰 发表于 2015-8-13 19:08 | 显示全部楼层
明确告诉你,Keil C51 不行。
可变长宏(Variadic macro)是C99及以上标准才支持的特性。C51与标准C都有很多地方不兼容,要支持C99,永远别想了。
 楼主| ousj 发表于 2015-8-13 19:08 | 显示全部楼层
嗯,知道了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

712

主题

7557

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部