为什么 for(;;) 循环的行为类似于无限循环?

2023-11-26

最近一个问题的答案for(;;){} loops (for (;;) 循环的作用是什么)似乎没有回答我的问题,所以我想我会尝试稍微完善一下问题。特别是,除了知道for没有条件的循环是无限循环,我想知道为什么它们是无限循环。

在声明中for (;_;){}, the _是一个条件表达式。我的第一个猜测是空表达式可能会计算为0 or NULL。但如果你测试:

for (;;){}

正如每个人都指出的那样,这是一个无限循环。

for (;1;){}

是一个无限循环。

但这些循环体根本不执行:

for (;0;){}
for (;NULL;){}

因此,空条件表达式似乎不会计算为0 or NULL.

所以,我的问题是:for (;;){}循环是 C 计算表达式的方式的产物,或者它只是一个特殊的实现定义的情况,因为从不执行的循环体不是很有用?

更新: 阅读评论和答案后,我意识到我的问题并没有想象的那么清晰。我认为这个问题有两个方面:

  1. 的行为是for(;;){}循环严格是 C 一般评估表达式的方式的结果,或者此行为特定于 C 评估的方式for声明?

  2. 为什么选择这种行为for循环缺少条件表达式?


C 和 C++ 都保证了这种行为。


[C99: 6.8.5.3/1]: Both clause-1 and 表达式-3可以省略。省略了一个表达式-2被替换为非零常数。


[C++14: 6.5.3/1]: The for陈述

for ( for-init-statement conditionopt; expressionopt) statement

相当于

{
   for-init-statement
   while ( condition ) {
      statement
      expression ;
   }
}

[..]

[C++14: 6.5.3/2]:条件和表达式中的一个或两个都可以省略。缺失的条件使得隐含的while子句相当于while(true).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 for(;;) 循环的行为类似于无限循环? 的相关文章

  • 为什么libc++的shared_ptr实现使用完整内存屏障而不是宽松内存屏障?

    在boost的实现中shared ptr 它用放松内存排序以增加其引用计数 https github com boostorg smart ptr blob master include boost smart ptr detail sp
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我

随机推荐

  • “sizeof”如何确定数组的大小?

    C 如何在运行时找到数组的大小 有关数组大小或边界的信息存储在哪里 sizeof array 完全由C编译器实现 当程序被链接时 看起来像sizeof 对你的呼叫已转换为常量 示例 当您编译此 C 代码时 include
  • 我可以在 C# 中强制内存清理吗?

    我听说 C 不会立即释放内存 即使您已经使用完它 我可以强制 C 释放内存吗 我正在使用 Visual Studio 2008 Express 这有关系吗 附 我对 C 及其管理内存的方式没有任何问题 我只是好奇 Jim 你没听错 它通过称
  • 捆绑执行不与 crontab 一起使用

    我正在尝试使用 crontab 执行以下 shell 脚本 bin sh cd mnt voylla production current bundle exec rake maintenance last 2 days orders bu
  • 使用列级 WHERE 子句更新多个列中的所有 SQL NULL 值?

    我们有一个包含大量宽表 每个表 40 80 列 的数据库 并且刚刚发现一个错误 该错误将 NULL 值引入到大约 500 条记录中 NULL 值可以出现在任何列中 所有列都是整数列 请参见下图 但这些 NULL 值会导致我们的报告系统之一出
  • 在 C# 中使用对象初始值设定项时无法识别引发异常的属性

    在下面的两个示例代码中 我尝试实例化一个名为Test通过使用 C 普通方法和对象初始值设定项 DateTime nullDate null this value will come from somewhere else DateTime
  • 导入错误:没有名为tensorflow的模块

    请帮我解决这个错误 我已经在我的服务器上安装了tensorflow模块 下面是它的信息 15IT60R19 cpusrv gpu 109 pip show tensorflow Name tensorflow Version 1 0 0 S
  • Internet Explorer 无法打开 pdf 字符串文件

    我 从我不管理的网络服务 收到一个包含 pdf 文件内容的字符串 在客户端 我使用这个函数 window open data application pdf base64 encodeURI TheStringWithThePdfConte
  • 基本的 openGL、顶点缓冲区和 pyglet

    编辑 rotoglup 在我的代码中发现了问题 添加我删除的着色器完成了解决方案 请参阅下面我的答案以获取正确的代码 带有着色器 Hi all 我正在尝试从中学习现代 OpenGL 的一些基础知识本教程 我想用 python pyglet
  • Azure Devops Rest API - 获取当前在代理池中排队的构建

    有没有办法只从 Azure DevOps Rest API 获取在特定池中等待可用代理的构建 我目前有这个端点 它为我提供池中发生的所有作业请求 https dev azure com organization apis distribut
  • 跨面板对齐 Swing 组件

    我们有一个 JPanel 其中包含多个包含 JComponent 的 JPanel 比如说 JLabels 和 JTextboxes 在每个内部 JPanel 中 我们使用 JGoodies 布局来确保所有标签的正确对齐 但当然 我们希望所
  • 在 OpenCV 中读取 .exr 文件

    我使用 Blender 生成了一些深度图 并以 OpenEXR 格式保存了 z 缓冲区值 32 位 有没有办法使用 OpenCV 2 4 13 和 python 2 7 访问 exr 文件中的值 逐像素深度信息 到处都找不到例子 我在文档中
  • Numpy - 检查一个数组的元素是否属于另一个数组

    我有 2 个 numpy 数组 xarr np array 1 1 1 2 1 3 1 4 1 5 y np array 1 1 1 2 我想检查每个元素是否xarr属于y或等于1 3 如果一个元素属于y 返回 y 如果某个元素等于1 3
  • 使用 Spring-Boot 无法在启动时进行 Liquibase 迁移

    下列的this文档 To automatically run Liquibase database migrations on startup add the org liquibase liquibase core to your cla
  • 以编程方式确定 AppEngine for Java 环境

    有没有办法在运行时以编程方式判断 Google App Engine 应用程序是在本地运行还是在托管运行 我正在寻找一种方法来在本地开发环境中运行时调用一些自定义存根代码 并在运行托管时进行不同的调用 您可以使用com google app
  • Silex:允许用户通过单击 html 元素并保持干净的 URL 来更改语言

    我在网站上使用 Silex 和 Twig 我希望允许用户更改网站的语言 我的问题 现在 如果我更改 URL 中的区域设置 它就可以工作 my account 我的页面内容是英文 默认 locale fr my account 我的页面内容是
  • (Python C API)PyRun_StringFlags 缺少内置函数?

    我正在尝试在我的宠物项目中嵌入一些Python 我已将问题简化为以下代码 include
  • System.Uri 和编码的冒号 (:)

    在 Net 4 5 之前 System Uri 似乎会对编码的斜杠进行取消编码 但此后此问题已得到修复 参考 https stackoverflow com a 20733619 188740 我在冒号方面遇到了同样的问题 System U
  • WPF 绑定 Width 到 Parent.Width*0.3

    我想将控件的宽度绑定到父级的宽度 但绑定到一定的比例 有没有办法做这样的事情
  • NetBeans 8.0 PHP CodeIgniter 框架支持

    我在用网豆8 0表明自动完成 for zend框架但不适合代码点火器 我怎样才能使用它代码点火器 for 自动完成支持 Thanks 将答案中的代码复制到此处 CodeIgniter 的 Netbeans 代码完成到项目中的 php 文件中
  • 为什么 for(;;) 循环的行为类似于无限循环?

    最近一个问题的答案for loops for 循环的作用是什么 似乎没有回答我的问题 所以我想我会尝试稍微完善一下问题 特别是 除了知道for没有条件的循环是无限循环 我想知道为什么它们是无限循环 在声明中for the 是一个条件表达式