搜索
bottom↓
回复: 21

马老师您的书第5章的例程中 while(1){}语句中的“;”不明白?

[复制链接]

出0入0汤圆

发表于 2008-4-28 10:32:44 | 显示全部楼层 |阅读模式
/*********************************************
Demo_5_2.c
Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/
#include <mega16.h> // 包括器件配置定义的头文件,不能缺少
#include <delay.h> // 包括延时函数定义的头文件,使用延时函数时不能缺少
void main(void)
{
// 定义PortC口的工作方式
PORTC=0x01; // PC口的第0位输出“1”,LED不亮
DDRC=0x01; // 定义PC口的第0位为输出方式
// 主循环
while (1)
{
delay_ms(1000); // 调用CVAVR提供的毫秒延时函数,延时1s
PORTC.0 = ~PORTC.0; // PC口第0位输出取反
};
}

马老师,您的书中的这个程序,就是那个   while(1){}; 语句,这个 while(1) 语句后面还有个";"分号,这个有什么意思啊?
我看得C51书怎么没有讲这样的想法啊?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2008-4-28 11:07:14 | 显示全部楼层
void main(void)
{
      // 定义PortC口的工作方式
    PORTC=0x01; // PC口的第0位输出“1”,LED不亮
    DDRC=0x01; // 定义PC口的第0位为输出方式
      // 主循环
    while (1)
    {
        delay_ms(1000); // 调用CVAVR提供的毫秒延时函数,延时1s
        PORTC.0 = ~PORTC.0; // PC口第0位输出取反
     };
}


明白了?

出0入0汤圆

发表于 2008-4-28 11:17:28 | 显示全部楼层
笔误?

出0入0汤圆

 楼主| 发表于 2008-4-28 11:46:20 | 显示全部楼层
好像不是笔误啊,我到CVAVR里面用向导生成的程序框架都有这个分号,不知道怎么回事。

出0入0汤圆

发表于 2008-4-28 12:04:32 | 显示全部楼层
恩,这是向导里生成的,

出0入0汤圆

 楼主| 发表于 2008-4-28 12:57:10 | 显示全部楼层
我就是刚刚学习C51,看的书都没哟这么介绍过,今天一看有点不明白不知道怎么要这样写。

出0入8汤圆

发表于 2008-4-28 13:50:06 | 显示全部楼层
c语言语法:这个分号是可要可不要
是我的记性不好,还是各位的c语言基础不好?

出0入0汤圆

 楼主| 发表于 2008-4-28 14:14:46 | 显示全部楼层
请问搂上的朋友,这个是C51里的语法还是PC 机的C语法啊,我只有看过C51里的语句,书中没有怎么讲。都是
while(1)
{}

出0入0汤圆

发表于 2008-4-28 14:19:15 | 显示全部楼层
多这一个分号不会有任何问题,少了它却需要自动程序生成器多进行若干次判断(这就为BUG导入带来了新的途径),明白?

出0入8汤圆

发表于 2008-4-28 14:24:01 | 显示全部楼层
只要是c语言,语法都是一样的
书中没讲,不表示不行,只是不提倡写那个分号,显得有些多余

出0入0汤圆

发表于 2008-4-28 15:48:34 | 显示全部楼层
不是笔误是什么?

1.标准用法:
while(条件)
{
}   

2.空语句:

;

单独“;”代表空语句

出0入0汤圆

发表于 2008-4-28 16:33:42 | 显示全部楼层
按标准C的语法,是需要一个";",表示一句或一个块结构的结束.不过现在{}后面的可以剩掉.

出0入0汤圆

发表于 2008-4-28 16:56:43 | 显示全部楼层
我认为8楼和10楼是正解,标准C语法里复合语句结尾不需要“;”, 单独的“;”表示空语句。可能是为了编写生成器省事添加的。

出0入0汤圆

发表于 2008-4-28 17:13:58 | 显示全部楼层
同意LS~~

出0入0汤圆

发表于 2010-3-9 20:31:33 | 显示全部楼层
ji

出0入0汤圆

发表于 2010-5-7 19:51:05 | 显示全部楼层
1楼的好牛!


  我从来不在括号外面写个“;”,照样可以编译?


  在自己没有搞清楚之前,请不要用居高临下的语气,除非你有马老师的水平!

  你明白?!

出0入0汤圆

发表于 2010-5-23 03:22:28 | 显示全部楼层
这个也要讨论了

出0入0汤圆

发表于 2010-8-22 17:02:08 | 显示全部楼层
增长知识了…

出0入0汤圆

发表于 2010-9-11 15:08:53 | 显示全部楼层
还是没讨论出到底是为什么啊、期待解决······

出0入0汤圆

发表于 2010-9-11 15:29:59 | 显示全部楼层
不要说一个“;”了,你放一千个";"都没问题.但是这一千个";"生成的代码长度为0.

出0入0汤圆

发表于 2010-9-22 15:57:56 | 显示全部楼层
没有什么可以讨论的。看看C的标准就可以了。

少了可能会出问题。多重复几个是为了保险。

我例子的程序框架是CVAVR生成的,它后面为了保险加上了“;”(可能怕你在{}中什么也不写,单单测试中断吧),我没有去掉。

咳,到底是学AVR应用,还是学C语言?

出0入0汤圆

发表于 2010-9-29 08:33:16 | 显示全部楼层
那个分号,目的是为了分号后面还能继续写表达式。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 11:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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