你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

楼主: 苏柚

【3.4签到】每日问答——语句for( ;1 ;)有什么问题?它是...

   关闭 [复制链接]
回帖奖励 82 ST金币 回复本帖可获得 1 ST金币奖励! 每人限 1 次

307

主题

3125

回帖

0

蝴蝶豆

论坛元老

最后登录
2020-7-17
发表于 2016-3-4 13:44:16 | 显示全部楼层

回帖奖励 +1 ST金币

签到
回复 支持 反对

使用道具 举报

9

主题

300

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-8-3
发表于 2016-3-4 13:50:49 | 显示全部楼层

回帖奖励 +1 ST金币

签到                 
回复 支持 反对

使用道具 举报

18

主题

699

回帖

4

蝴蝶豆

金牌会员

最后登录
2020-12-7
发表于 2016-3-4 13:56:22 | 显示全部楼层

回帖奖励 +1 ST金币

签到                     
回复 支持 反对

使用道具 举报

5

主题

26

回帖

0

蝴蝶豆

初级会员

最后登录
2018-3-14
发表于 2016-3-4 14:04:04 | 显示全部楼层

回帖奖励 +1 ST金币

认真对待ST的“每日问答”!

编程语言的描述一般可以分为语法及语义。
语法是说明编程语言中,哪些符号或文字的组合方式是正确的,语义则是对于编程的解释。

编译器对高级语言源程序的处理过程可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等几个阶段。
词法分析器:输入源程序,进行词法分析,输出单词符号。
语法分析器:在词法分析的基础上,根据语言的语法规则(文法规则)把单词符号串分解成各类语法单位,并判断输入串是否构成语法上正确的“程序”。
中间代码生成器:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码,比如说四元式。
优化:对中间代码进行优化处理。
目标代码生成器:把中间代码翻译成目标语言程序。

好了,说了那么多,那么,语句到底有什么问题呢?看下图
123.png

在uVision开发环境下,C51编译器,“for(;1;)”这种东西是没有办法出现的。
在MPLABX开发环境下,XC8编译器,提示的是分号错误,这叫词法错误。
在eclipse开发环境下,java编译器,提示的错误不但包含分号,还有那个“1”也是错的。因为java的条件时true或者false。

结论:楼主的“for(;1;)”有词法问题!
至于大家说的无限循环,完全符合语法,程序员会写到这句话时,就表明他的语义也正确了,谁没写过whle(1)!



回复 支持 1 反对 0

使用道具 举报

2

主题

64

回帖

9

蝴蝶豆

金牌会员

最后登录
2020-11-26
发表于 2016-3-4 14:30:29 | 显示全部楼层

回帖奖励 +1 ST金币

死循环的哦!
回复 支持 反对

使用道具 举报

315

主题

253

回帖

0

蝴蝶豆

论坛元老

最后登录
2017-12-7
 楼主| 发表于 2016-3-4 14:36:08 | 显示全部楼层
OPTION_REG 发表于 2016-3-4 14:04
认真对待ST的“每日问答”!

编程语言的描述一般可以分为语法及语义。

好样的
回复 支持 反对

使用道具 举报

14

主题

185

回帖

0

蝴蝶豆

金牌会员

最后登录
2019-9-2
发表于 2016-3-4 14:47:50 | 显示全部楼层

回帖奖励 +1 ST金币

死循环   
回复 支持 反对

使用道具 举报

0

主题

161

回帖

0

蝴蝶豆

高级会员

最后登录
2020-12-5
发表于 2016-3-4 14:51:36 | 显示全部楼层

回帖奖励 +1 ST金币

C语言里第一个分号前是循环起始条件,第二个分号前是结束条件,第三个分号前是循环步长。这个语句里其他两个是空语句,结束条件为真,就表示是无限循环。
回复 支持 反对

使用道具 举报

50

主题

1057

回帖

67

蝴蝶豆

论坛元老

最后登录
2020-12-2
发表于 2016-3-4 15:13:54 | 显示全部楼层

回帖奖励 +1 ST金币

本帖最后由 watershade 于 2016-3-4 15:39 编辑

另外各位都说语法有错误,经过编译,没有问题。我是在VS的命令行里面编译的:
  1. int main(int argc, char const *argv[])
  2. {
  3.         /* code */
  4.         for(;1;){
  5.                 printf("nihao\r\n");
  6.                 break;
  7.         }
  8.         printf("Hello\r\n");
  9.         return 0;
  10. }
复制代码
编译通过

for( ;1 ;)的更简化版本是for(;;)
表示无限循环。相当于while(1)
回复 支持 反对

使用道具 举报

6

主题

16

回帖

0

蝴蝶豆

中级会员

最后登录
2020-2-3
发表于 2016-3-4 15:50:46 | 显示全部楼层

回帖奖励 +1 ST金币

签到签到
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版