找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1462|回复: 9
打印 上一主题 下一主题
收起左侧

为什么在单片机C语言程序预处理阶段对位变量进行赋值会编译不过呢?

[复制链接]
跳转到指定楼层
楼主
ID:847776 发表于 2021-1-20 13:57 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
为什么在程序预处理阶段对位变量进行赋值会编译不过呢?
比如下方程序,如果led=0;就提示错误,sbit定义的位变量不能在函数外赋值吗?
提示“1602time.c(3): error C231: 'led': redefinition”
#include <reg51.h>
sbit led=P1^0;
//led=0;
void main()
{
while(1)
{
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:847776 发表于 2021-1-20 20:37 | 显示全部楼层
wulin 发表于 2021-1-20 16:47
编译器判断为重复定义,正确写法:

#include

谢谢,我知道正确写法是这样的,但没弄明白的是,这个全局变量赋值,为何在函数内不提示重复,放函数外面就会提示重复。
回复

使用道具 举报

板凳
ID:847776 发表于 2021-1-20 20:38 | 显示全部楼层
munuc_w 发表于 2021-1-20 16:09
提示行写的很明白,不是“不能赋值”,是重复定义了!在仔细检查一下。

为何放函数内就不提示“重复定义”了呢?
回复

使用道具 举报

地板
ID:847776 发表于 2021-1-21 09:32 | 显示全部楼层
本帖最后由 忆1709 于 2021-1-21 09:33 编辑
HC6800-ES-V2.0 发表于 2021-1-21 08:15
51C程序是从main()的第一句开始的,你这个赋值放在main()之外,怎么运行它呢?
这样写是一样的错误:
# ...

但如果这样写,就不会报错且运行正常。
#include <reg51.h>
unsigned char led=1;
//led=1;
void main()
{
        while(1)
        {
        
        }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表