找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1413|回复: 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:752974 发表于 2021-1-20 16:09 | 只看该作者
提示行写的很明白,不是“不能赋值”,是重复定义了!在仔细检查一下。
回复

使用道具 举报

板凳
ID:213173 发表于 2021-1-20 16:47 | 只看该作者
编译器判断为重复定义,正确写法:

#include <reg51.h>

sbit led=P1^0;

void main()
{
        led=0;
        while(1)
        {
        }
}
回复

使用道具 举报

地板
ID:847776 发表于 2021-1-20 20:37 | 只看该作者
wulin 发表于 2021-1-20 16:47
编译器判断为重复定义,正确写法:

#include

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

使用道具 举报

5#
ID:847776 发表于 2021-1-20 20:38 | 只看该作者
munuc_w 发表于 2021-1-20 16:09
提示行写的很明白,不是“不能赋值”,是重复定义了!在仔细检查一下。

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

使用道具 举报

6#
ID:213173 发表于 2021-1-21 06:22 | 只看该作者
忆1709 发表于 2021-1-20 20:37
谢谢,我知道正确写法是这样的,但没弄明白的是,这个全局变量赋值,为何在函数内不提示重复,放函数外面 ...

sbit led=P1^0;语句中的led并不是一个位变量名,而是端口P1.0的自定义名称。led=0;就是对端口的赋值操作,那么只能在函数内进行。也许有其它编译器可以例外,但Kei不行。这没有什么理由可讲,其创始人就是这么规定的。
回复

使用道具 举报

7#
ID:164602 发表于 2021-1-21 08:15 | 只看该作者
忆1709 发表于 2021-1-20 20:37
谢谢,我知道正确写法是这样的,但没弄明白的是,这个全局变量赋值,为何在函数内不提示重复,放函数外面 ...

51C程序是从main()的第一句开始的,你这个赋值放在main()之外,怎么运行它呢?
这样写是一样的错误:
#include <reg51.h>
unsigned char led;
led=0;
void main()
{
        while(1)
        {
        }
}
足以说明问题了。
回复

使用道具 举报

8#
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)
        {
        
        }
}
回复

使用道具 举报

9#
ID:164602 发表于 2021-1-22 20:52 | 只看该作者
忆1709 发表于 2021-1-21 09:32
但如果这样写,就不会报错且运行正常。
#include
unsigned char led=1;

是啊,定义申明时赋初值,是没有问题的。
因为定义申明的实质,是分配“容量”,同时在这个空间中给个值,是可以的嘛
回复

使用道具 举报

10#
ID:722618 发表于 2021-1-25 11:55 | 只看该作者
LED不能既是变量又是常量,可以在主程序中赋值。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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