打印

函数宏定义

[复制链接]
2853|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaojian1227|  楼主 | 2012-4-28 12:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天看了一下函数宏,现在在写程序的时候想实践一下,但是遇到了问题,没能理解,问问各位
比如我写了一个#define delay(x)  (while((x)--),但是编译通不过,显示为not a lvalue,这是什么原因呢?

相关帖子

沙发
delin17| | 2012-4-28 12:29 | 只看该作者
(x)不是个左值
x可能是个常数,
比如你delay(5).  会变成while(5--)。
如果支持inline,你直接用内联函数。

使用特权

评论回复
板凳
forgot| | 2012-4-28 12:31 | 只看该作者
定义有问题,不是一个左值

使用特权

评论回复
地板
ayb_ice| | 2012-4-28 13:29 | 只看该作者
#define delay(x)\
{\
    int i;\
    i = (x);\
    while(x--);\
}

使用特权

评论回复
5
Ryanhsiung| | 2012-4-28 14:50 | 只看该作者
#define delay(x)\
{\
    int i;\
    i = (x);\
    while(x--);\
}
ayb_ice 发表于 2012-4-28 13:29

这个写法,相当规范,有创意!!!

使用特权

评论回复
6
shj106| | 2012-4-28 15:55 | 只看该作者
#define Delay(x)   while((x)--)                   //先宏定义
unsigned int x=1000;                         //要给x定义变量类型                              

void tx(void)
{
     Delay(x);          //每次使用该延时函数时都要给x赐延时常数,你可能是没个x定义变量类型
}

使用特权

评论回复
7
ayb_ice| | 2012-4-28 16:09 | 只看该作者
#define Delay(x)   while((x)--)                   //先宏定义
unsigned int x=1000;                         //要给x定义变量类型                              

void tx(void)
{
     Delay(x);          //每次使用 ...
shj106 发表于 2012-4-28 15:55
不懂不要乱说
这是带参数的宏

使用特权

评论回复
8
shj106| | 2012-4-28 16:21 | 只看该作者
回楼上这位专家,我是不太懂,特向您请教,可这个带参数的宏中X是什么东东,你不先定义再使用,编译器怎知道x是什么东东,我使用过,碰到过1楼同学一过的问题,谢谢您的指点。

使用特权

评论回复
9
ayb_ice| | 2012-4-28 16:31 | 只看该作者
回楼上这位专家,我是不太懂,特向您请教,可这个带参数的宏中X是什么东东,你不先定义再使用,编译器怎知道x是什么东东,我使用过,碰到过1楼同学一过的问题,谢谢您的指点。 ...
shj106 发表于 2012-4-28 16:21
宏中的参数在调用时是会被替换的
比如:
调用
delay(my_delay);
此时的x被my_delay替换了

使用特权

评论回复
10
shj106| | 2012-4-28 16:36 | 只看该作者
明白了,非常感谢!

使用特权

评论回复
11
沈老| | 2012-4-29 09:52 | 只看该作者
#define DELAY(x)  {int i=x;while(i--);}

使用特权

评论回复
12
SLEET1986| | 2012-4-29 09:57 | 只看该作者
#define delay(x)\
{\
    int i;\
    i = (x);\
    while(x--);\
}
ayb_ice 发表于 2012-4-28 13:29

这个不对吧while(x--)

使用特权

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

本版积分规则

0

主题

5

帖子

0

粉丝