shgdd520com 发表于 2008-4-28 10:32:44

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

/*********************************************
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书怎么没有讲这样的想法啊?

quanyu2 发表于 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位输出取反
   };
}


明白了?

ATMEGA_007 发表于 2008-4-28 11:17:28

笔误?

shgdd520com 发表于 2008-4-28 11:46:20

好像不是笔误啊,我到CVAVR里面用向导生成的程序框架都有这个分号,不知道怎么回事。

mfm123 发表于 2008-4-28 12:04:32

恩,这是向导里生成的,

shgdd520com 发表于 2008-4-28 12:57:10

我就是刚刚学习C51,看的书都没哟这么介绍过,今天一看有点不明白不知道怎么要这样写。

rube 发表于 2008-4-28 13:50:06

c语言语法:这个分号是可要可不要
是我的记性不好,还是各位的c语言基础不好?

shgdd520com 发表于 2008-4-28 14:14:46

请问搂上的朋友,这个是C51里的语法还是PC 机的C语法啊,我只有看过C51里的语句,书中没有怎么讲。都是
while(1)
{}

watercat 发表于 2008-4-28 14:19:15

多这一个分号不会有任何问题,少了它却需要自动程序生成器多进行若干次判断(这就为BUG导入带来了新的途径),明白?

rube 发表于 2008-4-28 14:24:01

只要是c语言,语法都是一样的
书中没讲,不表示不行,只是不提倡写那个分号,显得有些多余

ATMEGA_007 发表于 2008-4-28 15:48:34

不是笔误是什么?

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

2.空语句:

;

单独“;”代表空语句

machao 发表于 2008-4-28 16:33:42

按标准C的语法,是需要一个";",表示一句或一个块结构的结束.不过现在{}后面的可以剩掉.

shark 发表于 2008-4-28 16:56:43

我认为8楼和10楼是正解,标准C语法里复合语句结尾不需要“;”, 单独的“;”表示空语句。可能是为了编写生成器省事添加的。

ChenHP 发表于 2008-4-28 17:13:58

同意LS~~

yinhe 发表于 2010-3-9 20:31:33

ji

liusoldier 发表于 2010-5-7 19:51:05

1楼的好牛!


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


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

你明白?!

chuchuang 发表于 2010-5-23 03:22:28

这个也要讨论了

fshunj 发表于 2010-8-22 17:02:08

增长知识了…

guxingganyue 发表于 2010-9-11 15:08:53

还是没讨论出到底是为什么啊、期待解决······

sharpufo 发表于 2010-9-11 15:29:59

不要说一个“;”了,你放一千个";"都没问题.但是这一千个";"生成的代码长度为0.

machao 发表于 2010-9-22 15:57:56

没有什么可以讨论的。看看C的标准就可以了。

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

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

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

sdpz 发表于 2010-9-29 08:33:16

那个分号,目的是为了分号后面还能继续写表达式。
页: [1]
查看完整版本: 马老师您的书第5章的例程中 while(1){}语句中的“;”不明白?