这是 C 中未定义的行为吗? [复制]

2024-04-17

我正在 gcc 上运行我的 C 代码来理解前/后增量运算符。 然而我看到的结果并不是我所期望的。就像第 6 行一样,因为 i 是 5,所以应该是

8 7 6 5 5

但它是8 7 6 5 8

然后到最后一行,显示14 14 14 14。有人可以解释一下这种行为吗?我曾预料到14 14 13 12

这个编译器依赖吗? printf 函数在序列点上的行为是否未定义?

#include <stdio.h>

int main()
{
        i = 5;
        printf("%d %d %d %d %d \n", i, i++, i++, i++, i);
        printf("%d \n", ++i);
        printf("%d \n", ++i);
        printf("%d \n", ++i);
        printf("%d %d %d %d \n", i, ++i, ++i, ++i);

}

该标准规定

在上一个和下一个序列点之间,对象应有其 存储值最多可通过表达式求值修改一次。 此外,仅应访问先验值来确定 要存储的值。

这些是您可以找到序列点的地方:

  • 在完整表达式求值结束时(完整表达式 是一个表达式语句,或者任何其他不是表达式的表达式 任何较大表达式内的子表达式);

  • at the ||, &&, ?:和逗号运算符;和

  • 在函数调用时(在评估所有参数之后,并且 就在实际通话之前)。

最后一点的详细说明:函数调用中的逗号运算符是not序列点和之间的表达式,s 可以按任意顺序求值。

Check this http://c-faq.com/expr/seqpoints.html and this http://c-faq.com/expr/evalorder2.html为了更好的理解。

In printf("%d %d %d %d %d \n", i, i++, i++, i++, i);,您在两个序列点之间多次写入同一内​​存位置,从而调用未定义的行为 https://en.wikipedia.org/wiki/Undefined_behavior.

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

这是 C 中未定义的行为吗? [复制] 的相关文章

  • 将集合绑定到自定义控件属性

    我没有运气尝试将数据集合绑定到我的自定义控件的属性 我已经实现了该控件的字符串属性的机制 在此处提供了一些帮助 并期望集合类型同样简单 但是我无法让它再次工作 这是我的自定义控件视图
  • 通过 SocketCAN 进行 boost::asio

    我正在考虑利用升压阿西奥 http www boost org doc libs 1 49 0 doc html boost asio html从a读取数据套接字CAN http en wikipedia org wiki SocketCA
  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 如何通过 JsonConvert.DeserializeObject 在动态 JSON 中使用 null 条件运算符

    我正在使用 Newtonsoft 反序列化已知的 JSON 对象并从中检索一些值 如果存在 关键在于对象结构可能会不断变化 因此我使用动态来遍历结构并检索值 由于对象结构不断变化 我使用 null 条件运算符来遍历 JSON 代码看起来像这
  • ASP.NET MailMessage.BodyEncoding 和 MailMessage.SubjectEncoding 默认值

    很简单的问题 但我在 MSDN 上找不到答案 查找 ASP NET 将用于的默认值 MailMessage BodyEncoding and MailMessage SubjectEncoding 如果你不在代码中设置它们 Thanks F
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行

随机推荐

  • Sequelize 如何查找具有多个 where 子句和时间戳的行 > NOW()

    我该如何使用 Sequelize 来做到这一点 SELECT FROM sessions WHERE user id AND token AND expires gt NOW 这就是我想要做的 假设Session是一个 Sequelize
  • 将值添加到列表

    下面是我的代码 List
  • Twitter Bootstrap - row-fluid 的位置问题

    我目前正在使用 Twitter bootstrap 构建一个网站 这太棒了 我的布局使用 div class row div class span6 div div class span6 div div class span6 div d
  • 为什么调用 BitBlt 或 CopyRect 时会失去透明度?

    Problem 我正在尝试从 32x32 块复制TBitmap into a TPaintbox这是我的地图编辑器 但我似乎无法使透明度正常工作 见下图 注意 出于演示和测试的目的 我在 TPaintbox 下方放置了一个 TImage 这
  • Java 中什么时候必须有默认构造函数和参数化构造函数?

    很多时候我遇到一个异常 说 默认构造函数的实现丢失 很多时候 参数化构造函数的定义本身就可以完成所有工作 我想知道在什么条件下会发生这种情况 如果类中不存在构造函数 则在编译时添加一个默认构造函数 如果类中存在任何一个参数化构造函数 则在编
  • WordPress 迁移中主页未加载,所有其他页面均加载

    似乎还没有人遇到过这个问题 我刚刚将一个小型 WordPress 网站从 iPage 上的测试服务器空间迁移到 HostGator 上的客户端服务器 当我在新服务器上登录 WordPress 时 该网站显示正常 但如果我清除缓存并继续运行一
  • 无法调试 Android 应用程序

    我尝试在模拟器和设备上调试 Android 应用程序 但我总是收到消息 等待调试器 等待调试器附加到进程 我真的不知道如何设置环境和应用程序来运行调试 如果你们中的任何人能够提供任何有用的提示 我将非常感激 问题出在主机配置文件中 C Wi
  • 插入事务和参数?

    我正在学习 VB Net 需要使用开源 System Data SQLite ADO Net 解决方案来处理 SQLite 数据库 我在 HOWTO 部分找到的示例仅是 C 语言的 有人可以在 VB Net 中提供一个简单的示例吗 我可以研
  • 塔楼高度之间的最小差异?

    我正在做一些面试问题 我看到了这个 已知 n 座塔的高度和 k 值 您必须将每个塔的高度增加或减少 k 您需要最小化最长和最短塔的高度之间的差异并输出该差异 我想答案将是 maxheight k minheight k 我已经尝试过一些测试
  • 如何禁用 Android Oreo 中用于 espresso 测试的新自动填充功能

    在 Android 设备上运行测试sdk 26导致他们因为新的失败Autofill https developer android com guide topics text autofill html当 espresso 尝试单击字段时隐
  • 如何在rails中使用动态绑定执行原始更新sql

    我想执行一个更新原始 SQL 如下所示 update table set f1 where f2 and f3 这条 SQL 将被执行ActiveRecord Base connection execute 但我不知道如何将动态参数值传递到
  • 捕获测试用例顺序

    我可以保证多个的执行顺序吗TEST CASEs with Catch https github com philsquared Catch 我正在使用 LLVM 测试一些代码 它们有一些我需要显式初始化的卑鄙的全局状态 现在我有一个这样的测
  • RODBC 错误 - ODBC 连接失败 - 无法使用我的 Mac 连接到 MySQL(小牛)

    我正在尝试在我的 mac 小牛 上使用 RODBC 通过 R 连接到 mysql 数据库 但经过几个小时的愚蠢努力后 我仍然无法让它工作 当我尝试连接到数据库时 RODBC 抛出此错误 错误消息非常简洁 我不知道这意味着什么 ch 我按照以
  • AWS RDS 公共访问

    我对 AWS 配置感到困惑 我的目标是创建一个可从网络内部和外部访问的数据库 这是我所拥有的 RDS 实例运行 postgresql VPC 内部的连接正常工作 端点被设置为可公开访问 当从外部访问时 实际上确实可以解析 但是 连接挂起 表
  • 如何验证一个 XSD 架构是另一个 XSD 架构的子集?

    如何验证一个 XSD 架构是否是另一个 XSD 架构的子集 我们正在使用 蓝图 XSD 模式的集合 定义子组件可用的所有可能的输入或输出 创建一个系统应用程序 许多子组件正在被实现 并且这些子组件使用 XML 文件在它们之间传递数据 每个子
  • 选择特定日期之后的数据

    我希望能够从数据框中选择特定日期之后或之前的日期 例如 使用黄金价格的 quandl 数据 pGold lt read csv http www quandl com api v1 datasets BUNDESBANK BBK01 WT5
  • 从光滑表定义创建表

    在 PlaySlick 示例中 有一个包含示例数据访问对象的文件 https github com playframework play slick blob master samples basic app dao CatDAO scal
  • 条件渲染和 ReactCSSTransitionGroup 动画

    我制作了一个小应用程序 它根据 Redux 状态呈现不同的组件 我想在其中一个组件渲染时应用 淡入淡出 动画 但是 由于某种原因 它对我不起作用 这是我到目前为止所拥有的 内容 js class Content extends Compon
  • 根据速度或其他变量向左、向右、向上和向下滑动

    我有一个从简单的手势扩展而来的类 我正在使用 onfling 方法 class MyGestureListener extends GestureDetector SimpleOnGestureListener Override publi
  • 这是 C 中未定义的行为吗? [复制]

    这个问题在这里已经有答案了 我正在 gcc 上运行我的 C 代码来理解前 后增量运算符 然而我看到的结果并不是我所期望的 就像第 6 行一样 因为 i 是 5 所以应该是 8 7 6 5 5 但它是8 7 6 5 8 然后到最后一行 显示1