实现无限循环时,使用 while(1) 与 for(;;) 与 goto (在 C 中)有区别吗?

2023-12-30

实现无限循环时,使用有什么区别while(1) vs for(;;) vs goto?

谢谢, 陈兹


即使您关闭优化器,它们也是等效的。

Example:

#include <stdio.h>

extern void f(void) {
    while(1) {
        putchar(' ');
    }
}

extern void g(void) {
    for(;;){
        putchar(' ');
    }
}

extern void h(void) {
    z:
        putchar(' ');
    goto z;
}

编译用gcc -O0给出所有 3 个函数的等效汇编:

 f:
 ;  [ EXTERNAL ]
 ;
 +00000 00000fb4 80402DE9             stmdb             sp!,{r7,lr}
 +00004 00000fb8 00708DE2             add               r7,sp,#0x0
 +00008 00000fbc 2000A0E3 loc_000008: mov               r0,#0x20
 +0000c 00000fc0 0A0000EB             bl                putchar (stub)
 +00010 00000fc4 FCFFFFEA             b                 loc_000008
 ;
 ;
 g:
 ;  [ EXTERNAL ]
 ;
 +00000 00000fc8 80402DE9             stmdb             sp!,{r7,lr}
 +00004 00000fcc 00708DE2             add               r7,sp,#0x0
 +00008 00000fd0 2000A0E3 loc_000008: mov               r0,#0x20
 +0000c 00000fd4 050000EB             bl                putchar (stub)
 +00010 00000fd8 FCFFFFEA             b                 loc_000008
 ;
 ;
 h:
 ;  [ EXTERNAL ]
 ;
 +00000 00000fdc 80402DE9             stmdb             sp!,{r7,lr}
 +00004 00000fe0 00708DE2             add               r7,sp,#0x0
 +00008 00000fe4 2000A0E3 loc_000008: mov               r0,#0x20
 +0000c 00000fe8 000000EB             bl                putchar (stub)
 +00010 00000fec FCFFFFEA             b                 loc_000008
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现无限循环时,使用 while(1) 与 for(;;) 与 goto (在 C 中)有区别吗? 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • ODBC v Libpq:PostgreSQL 的 C 库

    我将使用 C 库来连接和使用 PostgreSQL 数据库 我想知道 ODBC 和 Libpq 的优缺点是什么 据我所知 libpq 似乎更快 但我无法得到任何明确的答案或基准 另外 是否有任何其他库可能比 ODBC Libpq 更好 如果
  • GNU gdb 无法进入模板函数 (OS X Mavericks)

    我已经安装了gdb 7 7 来自 GNU 来源 在 OS X Mavericks 10 9 2 下 我对其进行了代码签名 因此每当我调试时它都可以正常工作c 不包含模板的文件 但是 它无法单步执行模板函数 可以单步执行常规函数 但无法单步执
  • Bootstrap 网格中列行的垂直对齐

    假设您有一个使用 Twitter Bootstrap 的两列布局 您希望其中特定的行彼此垂直对齐 div class container div class row div class col sm 6 h2 Column 1 h2 p O
  • 将一列类似 GeoJSON 的字符串转换为 GeoPandas 中的几何对象

    我在 GeoPandas 数据框中有一列 其中包含这样的字符串 type Point coordinates 37 55 55 71 或这个 type MultiPoint coordinates 37 6 55 4 它也可以是多边形或任何
  • iOS - 使用自定义加密密钥保护文件?

    昨天我发布了有关保护文件的问题 保护应用程序沙箱 https stackoverflow com questions 4595955 protecting the app sandbox 如前所述 如果用户在 iPad 上有密码 这似乎可以
  • jQuery:获取标题和 href 值作为变量

    我有一个带有标题和 href 值的链接列表 我希望能够单独获取这些值 但我总是获取第一个链接的值 这是为什么 在这里看我的小提琴 http jsfiddle net FaNdV 正如您所看到的 单击任何链接时 您始终会从第一个链接获取值 我
  • 带有自定义图像的 UISwitch

    我需要通过更改背景颜色以及旋钮 支架 图像来自定义 UISwitch 如下图所示 是否可以在不拒绝应用程序的情况下自定义 UISwitch 提前致谢 有一个onTintColor您可以在 UISwitch 上设置的属性 如果您还需要更改手柄
  • 根据布尔列升序或降序

    This is the table structure in PostgreSQL 10 尽管 日期 是一个int 它代表 yyyy mm dd 日期 我正在尝试写一个SELECT按日期排序 当 BC true 时desc 因此日期将按正确
  • Flutter:使用不包含 Bloc 类型的上下文调用 blocprovider.of()

    我是 flutter 新手 我想使用 BLoc 实现一个简单的登录屏幕 没有构建错误 但在运行时收到以下错误 使用不包含 LoginBloc 类型的 Bloc 的上下文调用 blocprovider of My Code class Log
  • Julia 中的字典帮助 - 从文本文件创建字典

    我正在尝试根据 Julia 中文本文件的内容创建一个库 以用于生物信息学问题 该文件的格式如下 UUU F CUU L AUU I GUU V UUC F CUC L AUC I GUC V 我想制作一本字典 其中键是 3 个字母部分 密码
  • 在表单之间传递数据

    我的项目中有 3 个 winform Form3 上有一个复选框 我想要做的是单击此复选框 然后在退出表单时对 Form1 中的复选框进行相同的检查 无论是否选中 我现有的代码如下 但它不起作用 我是否在某个地方错过了一个技巧 谢谢 For
  • Nat 列表在 0 到 2 之间的类?

    使用 Peter Neyens 的帮助answer https stackoverflow com a 39159167 409976 我尝试创建一个X类仅包含Nat小于或等于2 import shapeless import shapel
  • MongoDB 与 Mongoose 限制子文档

    对于 MongoDB 和 Mongoose 我是个菜鸟 所以请原谅我 我将 Node 与 Express 以及 Mongoose 一起使用 我有一个包含大量子文档的文档 以至于我的服务器在尝试加载所有子文档时内存不足 所以我想选择子文档的最
  • 无法解决排序规则冲突?

    我遇到了这个错误 但我不知道如何修复它 无法解决 Arabic CI AS 和 Arabic CI AS 之间的排序规则冲突 等于操作中的 SQL Latin1 General CP1 CI AS 注意 我已经从数据库选项更改了排序规则 g
  • mvc3 验证检查属性值是否不同

    在 MVC3 中 您可以向模型添加验证以检查属性是否匹配 如下所示 public string NewPassword get set Compare NewPassword ErrorMessage The new password an
  • Pytest 从不同的测试用例文件中排序

    您好 我使用 pytest 并在文件夹中有以下 2 个 py 文件 test abc py如下 class MyTest unittest TestCase classmethod def setup class cls cls a 10
  • Rails + Mongoid - 不要在 JSON 中返回 nil 值

    我在 Mongoid 中有很多可选字段 例如 field key type String field element type String field rect type Array 如果我返回此模型的 json 其中仅填充其中一个 我会
  • 在 Archlinux 上无法找到或加载 Qt 平台插件“xcb”(Write!AppImage)

    正在尝试安装写入 Arch Linux 上安装了 qt5 freetype2 2 9 1 和 fontconfig 2 2 13 1 12 g5f5ec56 1 的 AppImage levi astize Write write This
  • 如何使用 GCD 在后台定期运行代码块?

    如何使用 GCD 在后台定期运行代码块 我正在尝试编写一个具有多个子系统的游戏引擎 例如渲染 物理 游戏逻辑等 有些任务应该是事件驱动的 但有些任务 如物理系统 应该在后台以恒定的时间 例如 1 100 秒后 定期调用 我创建了一个代码块
  • 实现无限循环时,使用 while(1) 与 for(;;) 与 goto (在 C 中)有区别吗?

    实现无限循环时 使用有什么区别while 1 vs for vs goto 谢谢 陈兹 即使您关闭优化器 它们也是等效的 Example include