问说网 · 发表于 2015-01-31

文章13116 · 评论469

程序设计中的流程控制

字数3265 · 浏览 1238 · 评论 0

大多一门语言都提供了流程控制,形成了各自的语言关于流程语句的语法要素(更高级的跳转机制有异常等)。

设计即逻辑的逻辑,而且是面向人的控制逻辑的抽象即设计的第四种意思是让抽象以人。需要的方式进行组织,即人影响抽象的能力。

实际上设计无所不在,从你写第一行控制流程代码开始,你就在设计了,只不过是隐式的,机器并不会流程控制,是语言赋于你能以人类看得明白的流程设计逻辑向机器发令的。如果说流程控制设计是细小的,那么OO 是一种显式化的设计,当你用OO 来写代码时你就在设计,虽然你写的是实现,设计与实现间无明显分界,你照样是在设计,因为你用到了OO 的三重思想,继承,泛化,封装,这就是控制逻辑的逻辑,是设计因素。一句话,设计无所在不在,即使在C 那样的紧实现的语言中也存在设计。

上面谈到的设计是代码抽象,代码结构,也是设计的一种。

其实循环,跳转这些东西来自于汇编语言 ,高级语言接纳了这些理念(因为汇编语言几乎就是机器逻辑,高级语言提供类汇编语言这样的机制是为了符合平台逻辑,况且高级语言最终要编译成汇编语言和平台逻辑,循环语言要最终被还原成汇编语言的形式,这些处理速度就可大大加快),发展出了它们关于循环,跳转封装了的语言机制。

C 语言最终要编译成汇编语言和平台逻辑,循环语言要最终被还原成汇编语言的形式,这就是调试的由来,调试分语法级调试和语义级运行期的错误。

对语言机制的理解,应该始于编译后端,再终于其语法对应的语义。为什么控制结构如此重要呢,因为它代表语法和语义方面的要求。比如布尔条件式,语义允许短路的语言会直接编译出条件判断后的结果。有时如果语法语义允许,语法上布尔运算也可等同算术运算。因为布尔结果用数值可表示。C 语言就是这样

C 语言字符串有大量指针这说明了与C++ 的抽象字符串不一样,说明C 是用底层来描述问题和设计的。

这些说明,要更好地了解一门语言,最好要上升到他的语法规范。联系编译原理知识来了一解一些东西。以及编译实现时是如何满足这些规范的。

for 的条件表达式可能短路(可以借由它的这种能力实现一定程序上的延迟求值),它的update 部分可以是任何算式,甚至不要updata 部分一般把最常发生case 的情况放在最后面,如果你学过汇编就知道,编译器是从后到前搜索的。

注意汇编是没有逻辑运算符的,只有移位运算符(而往往C++中把它们同用)有三种,逻辑(与,或,异或,取反),移位(无符号左移,右移,高位补0 等等)。

在汇编中,contine 和break 的区别, contiune 放在循环语句的某一具体层中,当满足条件时,继续执行下一个当前循环(即重新判断条件),而break 可以放在一个循环的任何地方,是跳出当前循环(注意因为循环可能是嵌套的,所以这个当前循环是指break 所在的那一个嵌套层次),然后继续执行这个循环外的第一条语句(即结束循环)。

C 语言中的信号是什么东西呢?

C 语言中的信号是一种高级的跳转机制,语言的流程控制结构。

高级语言在封装机器汇编逻辑上损失了一定的灵活性(因为只有汇编才是与机器逻辑一一对应的)

而高级语言的流程控制,分支逻辑等,终归是某种抽象品,只能提供有限的If Else形式,这些封装了的高级语言关于流程的逻辑(其实判断,循环都是流程控制逻辑)。

这就是封装,抽象,与原来可获得到底层灵活性的矛盾所在。

第一个if 往往是最基本的条件逻辑,else 是一种变相的if 逻辑,是针对于已提出的if的反面,是if 正好相反的条件,而其它的if,在一个if 存在的条件下,相当于else if。

一定要明白这里的区别,这些语言逻辑产生的对应的汇编码的绝对性决定我们得明白这些细微的差别。

理解这一类汇编逻辑时,我们得理解intel 平台的逻辑,条件指令逻辑,和分支逻辑这二大部分典型的有,高级语言的条件逻辑转化为汇编逻辑时是它的倒装形式,而且else 部分是放在所有分支逻辑前面的。

明白这些,将有助我们理解高级语言汇编出来的逻辑,从而更好明白高级语言的这些关于流程的语言机制。

本文系作者 问说网 授权问说网发表,并经问说网编辑,转载请注明出处和 本文链接

问说网手机版

躺着 站着 跪着轻松访问

更多 热门话题

APP界面

APP界面

文章 41517

APP欣赏

APP欣赏

文章 41450

APP手机界面

APP手机界面

文章 41440

图片素材

图片素材

文章 29463

高清图片

高清图片

文章 26225

更多 推荐作者

问说网

文章 13116

GallupDarnell

文章 117

GibbonRoy

文章 119

StuartKelly

文章 115

YeatesGeoffrey

文章 113

发布评论

顶部 反馈 评论 底部

意见反馈

感谢您对问说网的支持,提出您在使用过程中遇到的问题或宝贵建议,您的反馈对我们产品的完善有很大帮助。

您的反馈我们已收到!

感谢您提供的宝贵意见,我们会在1-2个工作日,通过您留下的联系方式将处理结果反馈给您!