c - 是否可以使用具有误导性语法的 for 循环?
问题描述
for循环的语法:
for(initialization;condition;increment/decrement){
statements;
}
为什么下面的代码运行无限次,然后为什么没有语法错误?
int x=10;
for(x++;x++;x++){
printf("\n %d",x);
}
解决方案
为什么下面的代码运行无限次......?
因为使用的条件不会阻止它执行,因为它通常永远不会评估为0
.
x
在每次迭代中递增两次,直到达到宏INT_MAX
( limits.h
) 中定义的值。在那之后,递增x
调用未定义的行为。
...然后为什么没有语法错误?
x++
是一个有效条件,编译器不会检查您设置为条件的表达式是否有意义。它只检查语法错误。所以程序可以编译,运行时,循环是无限的。
所以回答:
是否可以使用具有误导性语法的 for 循环?
答案是:是的。但在这种情况下,它会在某些时候调用上面所说的未定义行为。
推荐阅读
- dialogflow-es - 如何使用 Dialogflow 将 3rd 方 API 连接到 Google Actions?
- python - Python:在游戏中添加计数器
- python-2.7 - 具有有限权限的 xlsxwriter 工作表保护功能
- highcharts - highcharts 第一个和最后一个类别宽度
- javascript - new Function(...).call() 在 chrome 中创建内存泄漏
- c - 在现有的 R 包中模仿 C 的用法
- r - 如何根据其位置加入两列?
- c - 如何在C中将可变大小的int数组初始化为0?
- python - 使用分组依据的追踪或移动平均线
- docusignapi - DocuSign SOAP API + SAP Ariba 合同管理