矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: aojieage

C语言为什么要定义数据类型

[复制链接]
     
发表于 2017-12-26 21:59:50 | 显示全部楼层
c 程序在pc机上和单片机上都可以运行。学c先在pc机上做实验。
回复 支持 反对

使用道具 举报

     
发表于 2017-12-26 22:08:42 | 显示全部楼层
定义数据类型其实是方便使用,可以让编程者灵活掌握如何充分利用内存,提高程序的运行效率;可以使编写程序变得简单,如果用汇编编写一个解二元二次方程的程序,那些算法就会很恐怖的,用C语言就变得很容易,也更接近人类的思维,但编写程序时就要考虑单片机的内存占用情况了。这就需要考虑用什么数据类型处理什么任务了。编写程序不只是通过了,能使用的问题,还有个执行效率的问题,毕竟一般的计算机的资源还是有限的。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2017-12-26 23:09:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2017-12-27 19:47:15 | 显示全部楼层
C语言相对于汇编主要是不必关心内存怎么分配,不必关心汇编里面乱七八糟的跳转位置标号,再就是对于数据,尤其是16位、32位整型、浮点数、平方开方等等的运算非常方便。从语言角度讲,C语言写起来会比较简练,尤其是比较复杂的循环语句。
回复 支持 反对

使用道具 举报

     
发表于 2017-12-27 21:17:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2017-12-29 21:29:19 | 显示全部楼层
la45088d1 发表于 2017-12-26 10:52
然后你会惊讶地发现,别人用一天时间写完几百行代码,你写了几千条指令用了三四天,还不一定对;
然后 ...

我去,兄弟,很佩服你这么多的然后你会发现!
除了极少数关键代码,以及学习某型原理架构,我会远离非典、远离ASM
看你这实际工程里的驱动文件都是.s,真是挺自虐的。
回复 支持 反对

使用道具 举报

     
发表于 2018-1-3 23:33:49 | 显示全部楼层
比如你在一个程序中经常用到volatile unsigned char类型,
volatile unsigned char value1;
.....
volatile unsigned char value2;

如果你先用
typedef volatile unsigned char vu8;
vu8就成了 volatile unsigned char类型,你就可以少打很多字。
vu8 value1;
...
vu8 value2;
或者有个强制类型转换
value1 = (vu8)func();
而且typedef的用途远不止这些。
回复 支持 反对

使用道具 举报

     
发表于 2018-1-4 07:15:55 | 显示全部楼层
VBA之类的语言可以不用定义数据类型,直接使用变量,数据类型的使用,1.提高运行效率,如果没有类型,只能安最大可能类型分配空间,这对空间和时间都是浪费.2,有了类型,可以进行类型检查,编译器可以提前发现,你把一个整数加给一个字符串之类的问题,否则只会在运行是崩溃。无类型编程语言一般是解释型语言,如ruby,vba之类,对运行速度没有要求
回复 支持 反对

使用道具 举报

发表于 2018-1-4 17:26:58 | 显示全部楼层
你要知道片子的内存是有限的,你每定义一个变量,这个变量就得有地方存储,为它分配的时候还要考虑给他留多大空间才能装下他,这个时候你定义的变量类型就派上用场了,是八位变量就是255/十六位变量就是65535/以此类推。这就是为什么要定义变量类型的原因。当然了不光是变量常量也是比如在51单片机中的 unsigned char code i=0xff;这就是一个八位常量同样要声明类型,就像你去买房子你需要考虑你的房子住几个人一样。纯手打,希望能帮到你;
回复 支持 反对

使用道具 举报

发表于 2018-2-5 20:46:48 | 显示全部楼层
汇编变量是人为的分配的,不是编译器分配管理的。C里面的变量是编译器分配管理的,所以C里面的变量要类型,这样C编译根据类型来分配变量占用的内存大小。在单片机中,不同的单片机的内存宽度不同,有8位宽的、有16位宽的,也有32位宽的,在8位宽的芯片中,你定义个int类形,要占用2字节内存,用汇编声明就要声明成2个字节分别为高低部分,也就是编程的人知道这2个字节是同一个数据,汇编处理这个数据时要对这2个字节协同处理,要多个指令。那么C里面呢,编译器知道类型是int型,就分配2个字节出来,使用时C编译器会用多个相应的指令来处理这个数据的。如果C没有数据类型,C编译器就不知道咋处理了。实际汇编是人为的指派变量在内存中的地址,而C里面把指派地址的任务交给了C编译器,这样编程从员就不用再算计管理内存了,C编译代劳了,这样解放了程序员的部分工作。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 09:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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