"no statement" 和 continue 之间的区别
Posted
技术标签:
【中文标题】"no statement" 和 continue 之间的区别【英文标题】:Difference between "no statement" and continue 【发布时间】:2014-12-31 22:39:18 【问题描述】:在下面的代码中,请查看带有“continue”语句的部分。如果我删除 'continue' 语句并且我什么都没有代替它会有什么不同。
int prime_or_not(int x)
int i;
if (x == 1 || x == 2)
return 1;
else if (x % 2 == 0)
return 0;
else if (x > 2)
for (i = 3; i < x; i += 2)
if (x % i == 0)
return 0;
break;
else
continue;
return 1;
else
return 0;
【问题讨论】:
在调试器中单步执行你发现了什么?break
和 continue
都不是必需的。
顺便说一句,1 不是素数。
有些人以“最佳实践”的名义总是为每个if
拥有一个else
。在您显示的代码中,给定的else continue;
、一个空的else
和根本没有else
都会产生相同的效果。此外,在return
之后放置一个中断是无法访问的代码。
关于这一行:'for (i = 3; i >1); i += 2)'
【参考方案1】:
这根本没有区别。 continue
语句是跳转语句。基本上,它会跳回你的循环而不执行它之后的代码。
由于continue
语句是在您的循环中最后执行的,因此它没有任何效果。
【讨论】:
【参考方案2】:这对您的代码没有任何影响,但请考虑这样的事情:
(伪代码):
for(int i = 10; i > -5; i--)
if(i == 0)
continue;
printf("%d", 10/i);
【讨论】:
【参考方案3】:'continue' 直接跳转到'for' 或'while' 括号“”的末尾。在您的情况下,由于 continue 关键字之后没有任何内容,因此没有区别。
为了清楚起见,通常情况下,“继续”和不声明之间存在很大差异。例如,
for (code-condition)
code-1
code-2
continue;
code-3
code-4
一旦 'continue' 行被执行,它会直接跳到结束的 "",忽略 code-3 和 code-4。在这里执行的下一段代码是代码条件。
【讨论】:
【参考方案4】:在你的情况下没有区别。
但是 continue 将立即移动到循环的下一次迭代,如果有任何代码,则跳过它之后的任何代码。
考虑一下:
int x;
for(x = 0; x < 100; x++)
if(x == 50)
//do something special
continue;
//code here is skipped for 50
//do something different for every other number
因此 continue 语句在某些情况下可能很有用,但对于您的代码而言,它绝对没有任何区别(可能取决于编译器,但它只会增加最终可执行文件的大小,添加另一个 jmp 指令,或者也许不会,因为它可能会完全展开循环)。
【讨论】:
【参考方案5】:continue
语句在您的示例中没有用。它应该用于将代码执行移动到循环的末尾:
while (is_true)
...
if (foo)
continue;
if (bar)
break;
...
/* 'continue' makes code jump to here and continues executing from here */
/* 'break' makes code jump to here and continues executing from here */
您可以将continue
视为“评估循环条件并在条件为假时继续循环”,您可以将break
视为“退出循环,忽略循环条件”。
与do-while
相同:
do
...
if (foo)
continue;
if (bar)
break;
...
/* 'continue' moves execution to here */
while (is_true);
/* 'break' moves execution to here */
【讨论】:
【参考方案6】:我会简化块
for (i = 3; i < x; i += 2)
if (x % i == 0)
return 0;
break;
else
continue;
到
for (i = 3; i < x; i += 2)
if (x % i == 0)
return 0;
额外的行不会改变代码的行为。
【讨论】:
@iKiWiXz,现在已修复 :)以上是关于"no statement" 和 continue 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 Laravel 迁移中的单个 DB::statement("Query 1; Query 2") 中使用多个 SQL 查询吗?
Postgresql:prepared statement "S_1" already exists
ResultSet.insertRow() VS Statement.executeUpdate("INSERT INTO...")。哪个更好用?
错误:[Pivotal][Greenplum JDBC Driver][Greenplum]prepared statement "PS1" 已经存在
statement和preparedStatement的优缺点各是啥?
java.sql.SQLException: Can not issue data manipulation statements with execu 这是错误提示