死循环编译能通过吗
‘壹’ 死循环怎么解
死循环
(无法靠自身的控制终止的循环)
编辑
在编程中,一个无法靠自身的控制终止的程序称为“死循环”。
例如在c语言程序中,语句“while(1)printf("*");”就是一个死循环,运行它将无休止地打印*号。
不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环。因此,任何编译系统都不做死循环检查。
在设计程序时,若遇到死循环,我们可以通过按下Ctrl+Pause/Break的方法,结束死循环。
然而,在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。例如,我们使用的Windows操作系统下的窗口程序中的窗口都是通过一个叫消息循环的死循环实现的。在单片机、嵌入式编程中也经常要用到死循环。在各类编程语言中,死循环都有多种实现的方法,以C语言为例,可分别使用while.for,goto实现。
‘贰’ c语言中循环语句如果没有终止条件能否编译
可以啊,编译器只能检查语法错误和一些简单的语义错误,死循环不会报错
‘叁’ 为什么这个for循环是死循环 (pascal)
嘿嘿,howlshadow可能只用Delphi,很少用turbo pascal或free pascal
end. 表示 program xxx begin的结束, 在Delphi中.dpr可以看得到!
这个程序是一个死循环,turbo pascal也可以编译通过.刚才用free pascal试了下,编译报错!
这是因为pascal在编译的程序在判断for循环语句是否结束时, 首先对循环变量加1, 再判断是否“等于”结束值+1,是则退出
而当循环体中修改了循环变量,造成这时的值永远不等于结束值的话,就会出现死循环!
你可以加两句看看效果:
var
a,i:longint;
begin
for i:=1 to 100 do
begin
a:=a+i*i;
i:=i+2;
writeln(i);
if i>120 then break;
end;
end.
或改成下面的,也不会出现死循环!
var
a,i:longint;
begin
for i:=1 to 100 do
begin
a:=a+i*i;
i:=i+1;
end;
end.
‘肆’ 什么是死循环
在编程中,一个靠自身控制无法终止的程序称为“死循环”。
例如在C语言程序中,语句“while(1)printf("*");”就是一个死循环,运行它将无休止地打印*号。不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环。因此,任何编译系统都不做死循环检查。
在设计程序时,若遇到死循环,可以通过按下Ctrl+Pause/Break的方法,结束死循环。然而,在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。
(4)死循环编译能通过吗扩展阅读
死循环的产生原因:
死循环也可能因为多个模块之间的交互而产生。考虑一台服务器若收到无法理解的需求时,会回应错误信息,此架构中不会有死循环。
但若有二台上述的服务器(A和B),互相交换数据,A收到由B所提交无法理解的需求,会回应错误信息给B,但若B也无法理解A提交的需求(其实是A的错误信息),会再以自己的格式回应错误信息给,A收到后无法理解,会再回应错误信息给B。像邮件循环就是这类的例子。
‘伍’ java中死循环后面的语句是否会执行到的问题
首先,你的while里面,如果什么都不写的话,while是恒成立的,所以永远不会执行i++
但如果你里面有if语句,在某些情况下,它可能会执行到break上面来,跳出while,所以i++写在这里,编译器会认为它没有问题。
if里面是false,while里面是true,你可以想一下,if(false)永远不可能成立,所以这个分支是永远不可能执行到的,不能执行if那么i++也是执行不到。在这种情况下,编译器不会报错。所以会有你说的Dead code.
‘陆’ 在keil中用C语言编写程序时遇到死循环是不是不能生成hex文件
没有关系的,可以正常编译的
‘柒’ pascal里死循环怎么办编译器能判断出来吗
不论什么语言
属于逻辑错误的目前市面上的常用编译器都不能进行判断!
除非特定的编译器..不过那也不太现实
..死循环只有在运行期间才能表现出来
编译器如何判断?
嘿..好像话不能说死了..像WIN系统就能检测防止死锁(死锁与死循环在一定程度上是属于同种类型)