关于#define和sbit的区别

5532   2009-4-5 15:11 楼主
#defined P01=P0^1;

sbit P01=P0^1;

请问下这2个有却别吗?用以来像执行P01=0;P01=1;感觉一样

回复评论 (17)

没什么差别吧
点赞  2009-4-5 15:56
没啥差别
点赞  2009-4-5 17:19
sbit  是定义位,只能用于位.#defined 是名字替换。
点赞  2009-4-5 17:32
第一句,错了,等号 干嘛用的?
哪里看的 define 语法?/

再有,第一个方法,特定情况下才对

刚才没仔细看
不好意思
点赞  2009-4-5 18:01
啊,多写了个等号
点赞  2009-4-5 18:39
而且多了个 “;”

引用: 引用 5 楼 wangfan027 的回复:
啊,多写了个等号
点赞  2009-4-5 20:49
#defined P01 P0^1
sbit P01=P0^1;

#define的用处参考大量的C语言基础资料。对应的P01仅仅是预编译期的文本替换效果,实际运行时堆栈中不存在P01这个东西。

sbit是变量类型,对应的P01是一个变量,实际运行时堆栈中已经分配了对应的空间。
点赞  2009-4-6 14:44
自己去看看keil出来的汇编代码
点赞  2009-4-6 17:02
知道define 和 typedef 的区别就知道了。
一个是字符替换,一个是类型定义。
点赞  2009-4-6 21:52
习惯问题,第二种写法不用keil代码就不能用了。
点赞  2009-4-7 08:22
用起来 都一样,7楼 解释的很专业
点赞  2009-4-7 09:44
恰恰:
#define P01 (P0^1)
P01=0;//error C213: left side of asn-op not an lvalue
使用:
sbit P01=(P0^1);
P01=0;//OK
点赞  2009-4-7 21:03
引用: 引用 12 楼 schlafenhamster 的回复:
恰恰:
#define P01 (P0^1)
P01=0;//error C213: left side of asn-op not an lvalue
使用:
sbit P01=(P0^1);
P01=0;//OK

为什么会出现这个问题呢?
点赞  2009-4-7 21:48
P0^1不可作为赋值表达式左值。所以需要用sbit变量。
点赞  2009-4-8 09:14
P0^1

在执行到这句的时候,编译器直接去找它的值了


而不是把它当成一个寄存器的位去看待

点赞  2009-4-10 22:32
#define 是不带参数的宏定义,比如#define PI 3.14
点赞  2009-9-21 21:52
sbit 习惯定义端口会多点
点赞  2009-9-21 21:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复