打印
[51单片机]

keil c51支持可变参数宏定义吗?

[复制链接]
6652|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juginhine|  楼主 | 2014-7-16 15:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好。keil c51支持可变参数宏定义吗?
例如我对一个byte的指定bit置1的话,我可以宏定义 #define set(byte, bit)   (byte | (1<< bit))
但是如果我对一个byte某一些bit要置1的话呢?我想用宏 #define set(byte, bit1,bit2...)
我想用这样的方式来操作。可是这种可变参数宏定义不知道如何操作?不知道有高手知道不?

相关帖子

沙发
wangch_sh| | 2014-7-16 15:43 | 只看该作者
#define set(byte, bit1,bit2)   (byte|(1<<bit1)|(1<<bit2))

使用特权

评论回复
板凳
juginhine|  楼主 | 2014-7-16 15:49 | 只看该作者
wangch_sh 发表于 2014-7-16 15:43
#define set(byte, bit1,bit2)   (byte|(1

呵呵你这是针对2个参数的可以这样操作,我的意思是后面的参数不确定。可能只有bit1,也可能有bit1,bit2,也可能有bit1,bit2,bit3,bit4.参数可能从1个到8个不等。
如果确定个数就肯定可以像你那样定义了。

使用特权

评论回复
地板
ayb_ice| | 2014-7-16 15:49 | 只看该作者
好象不行

汇编下可以

使用特权

评论回复
5
wangch_sh| | 2014-7-16 15:50 | 只看该作者
那可难办了

使用特权

评论回复
6
juginhine|  楼主 | 2014-7-16 15:56 | 只看该作者
ayb_ice 发表于 2014-7-16 15:49
好象不行

汇编下可以

汇编下怎么操作?学习下。谢谢!

使用特权

评论回复
7
juginhine|  楼主 | 2014-7-16 16:05 | 只看该作者
我查了keil帮助说明也没有查到,应该是keil c51不支持可变参数宏定义了。

使用特权

评论回复
8
xyz549040622| | 2014-7-16 17:51 | 只看该作者
你可以试试,理论上说宏定义是c语言的事情,和keil c51没关系

使用特权

评论回复
9
juginhine|  楼主 | 2014-7-17 10:50 | 只看该作者
昨天查了一天,试了一天都没有解决,有高手可以帮忙吗?谢谢!

使用特权

评论回复
10
john_lee| | 2014-7-17 11:32 | 只看该作者
明确告诉你,Keil C51 不行。
可变长宏(Variadic macro)是C99及以上标准才支持的特性。C51与标准C都有很多地方不兼容,要支持C99,永远别想了。
附:Variadic macro 资料

使用特权

评论回复
11
ahr| | 2016-10-1 15:08 | 只看该作者
#include <stdarg.h>

使用特权

评论回复
12
linqing171| | 2016-10-10 14:09 | 只看该作者
这个实现不了。

使用特权

评论回复
13
天风立马| | 2016-10-11 21:08 | 只看该作者
虽然是老帖子,既然又被翻出来了:
#include <stdarg.h>
va_list
va_start
va_arg
va_end
自己查源码去吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

180

帖子

0

粉丝