数码之家

 找回密码
 立即注册
搜索
查看: 476|回复: 6

[C51] 小白学单片机记录之关键字data、bit,奇怪的编译问题

[复制链接]
发表于 2025-1-11 11:10:44 | 显示全部楼层 |阅读模式
本帖最后由 wangxiangtan2 于 2025-1-11 12:58 编辑

在标准C/C++、C#里面data都不是关键字,但在嵌入式C里面data是关键字;
在C#里面byte是关键字,但在标准C/C++、嵌入式C里面byte都不是关键字;

靠着C#的惯性早上抄代码的时候用了data当变量,结果当然是编译不通过。
但是机缘巧合我给他弄得编译过了,哈哈哈,当然编译过了没用,程序应该还是不会正常执行的。
一、关键字 data
这是单片机C语言中特有的关键字,表示数据存储区,标准C语言中是没有的,如
int data x ;
表示将 x 定义在数据存储区。
二、关键字 bit
bit 在C51里面类似C语言的bool,bit定义的是一个位数据类型,只能为0或1两个值
①bit是C51扩展的变量类型
bit和int、char之类的差不多,只不过char是8位,bit是1位,都是变量,编译器在编译过程中分配随机的地址,bit只有0和1两个值
②bit位标量
bit位标量是C51编译器的一种扩充类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组,它的值是一个二进制位,不是0就是1,也类似于高级语言中的true和false。

byte不是关键字,随便当变量用编译正常通过:



data 是关键字,当变量用编译不通过:



如何把data当变量用还能编译通过呢?这样操作:
在头文件.h里面最后留前半个注释符/*,在.c最后加上后半个注释符*/,编译就通过了:



咋发现的呢?我在VSCode里面定义header模板的时候漏了最后的“*/”,
然后用data当变量的时候,编译后报错是“unterminated comment”,就是注释没结束,
然后我在.c里面最后加上*/就编译通过了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2025-1-11 12:55:57 | 显示全部楼层
/* */不是代表注释吗?//是注释当前行
注释当然不会被编译了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-11 13:00:14 | 显示全部楼层
sz1988 发表于 2025-1-11 12:55
/* */不是代表注释吗?//是注释当前行
注释当然不会被编译了

是的,刚想明白了,
很少人跨文件用注释符吧
回复 支持 反对

使用道具 举报

发表于 2025-1-11 13:47:30 来自手机浏览器 | 显示全部楼层
这是在说什么?C语言出新标准编译器了?
回复 支持 反对

使用道具 举报

发表于 2025-1-11 18:30:37 | 显示全部楼层
没整明白为什么非要用data做变量,改个单词避开多简单,改头文件不麻烦吗。
回复 支持 反对

使用道具 举报

发表于 2025-1-13 10:46:24 | 显示全部楼层
用宏替换就行了
回复 支持 反对

使用道具 举报

发表于 2025-1-13 15:09:05 | 显示全部楼层
可能是关键字的词尽量不要用作变量名。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-2-15 01:11 , Processed in 0.140400 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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