51中这样定义的宏有错吗?

[复制链接]
4433|22
 楼主| doob 发表于 2007-12-4 16:16 | 显示全部楼层 |阅读模式
测试了一下,宏没起到作用!
SomeNOP( n),不管n为何值,somenop的时间都不变。
 楼主| doob 发表于 2007-12-4 16:48 | 显示全部楼层

AO,这个格式看样子要定义成函数才可以

孤星119 发表于 2007-12-4 17:17 | 显示全部楼层

有这种定义的么?

有这种定义的么?后面跟个简单的计算还可以.跟个函数也可以么?等待学习
 楼主| doob 发表于 2007-12-4 17:18 | 显示全部楼层

呵呵,是不可以~~~~

eleclike 发表于 2007-12-4 18:02 | 显示全部楼层

lz的SomeNOP和( n)是连在一起的?

如果连在一起的话,你并没有定义一个完整意义的宏,如果分开的,你是定义了SomeNOP代替( n),而下面的程序也没用到SomeNOP,就更不会.....
computer00 发表于 2007-12-4 18:43 | 显示全部楼层

参考一下圈圈的这个宏定义~~~~

#define DispLineInf()      
{                          
 Prints(" in file "");    
 Prints(__FILE__);         
 Prints(", @ line ");      
 PrintLongInt(__LINE__-1); 
 Prints(" ");           
}


试试这样定义:

#define someNOP(n)     
{                      
 uint8 i;              
 for(i=0;i<n;i++)      
  _nop_();             
}
ayb_ice 发表于 2007-12-4 20:17 | 显示全部楼层
zmbnj 发表于 2007-12-4 20:36 | 显示全部楼层

11

注意换行符‘’,不要吝啬"{}""()"
eraychen 发表于 2007-12-4 21:07 | 显示全部楼层

00才是正确的

 楼主| doob 发表于 2007-12-5 13:47 | 显示全部楼层

谢谢21ic,谢谢各位,谢谢00

athlon64fx 发表于 2007-12-5 13:57 | 显示全部楼层

圈圈的宏还不够完善,应改为这样:

#define someNOP(n)          
do {                        
    uint8 i;                
    for(i=0;i<n;i++)        
        _nop_();            
} while(0)
dld2 发表于 2007-12-5 14:00 | 显示全部楼层

这个宏包含i变量,还是有问题的。

i在程序中随处都是。
athlon64fx 发表于 2007-12-5 14:10 | 显示全部楼层

re:

楼上先了解一下什么是“局部变量”。
疯子8972 发表于 2007-12-5 14:23 | 显示全部楼层

呵呵

认为 athlon64fx正解:)
dld2 发表于 2007-12-5 14:27 | 显示全部楼层

嘿嘿

脸红了。
hbicecream 发表于 2007-12-5 14:27 | 显示全部楼层

干嘛非用宏呢?用内联函数

computer00 发表于 2007-12-5 14:27 | 显示全部楼层

有大括号就行了吧,do while起啥作用的?

{}中的是局部变量,这个倒不用担心。 

不过有些编译似乎不支持在函数中间的{}声明变量,必须在函数开头定义。
athlon64fx 发表于 2007-12-5 14:30 | 显示全部楼层

re:

试试这样可以吗:

if(1)
    someNOP(2);
else
    someNOP(3);
xwj 发表于 2007-12-5 14:38 | 显示全部楼层

是啊,为什么非要用宏呢???

这里根本就不该用宏,难道你只想用一次?

LZ,去看看内联函数吧,关键字inline
athlon64fx 发表于 2007-12-5 14:39 | 显示全部楼层

只用大括号的话,会在 else 前多一个“;”

if(1)
    someNOP(2);  // 会产生错误
else
    someNOP(3);


只能这样写:

if(1) {
    someNOP(2);
} else {
    someNOP(3);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

165

主题

1113

帖子

3

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