意外结果,Gnu C 中的三元运算符

2023-12-20

所以三元运算符的运算符优先级为C对我来说真的很奇怪。例证:

#include <stdio.h>

int main ()
{
   int i=5;
   int j=6;
   int k=7;
   printf("A: %d\n", i+j+(k!=7)?1:11); //prints 1
   printf("B: %d\n", i+j+((k!=7)?1:11)); //prints 22
   return 0;
}

这似乎与这里的问题类似:
C++ 三元条件和赋值运算符优先级 https://stackoverflow.com/questions/7499400/c-ternary-conditional-and-assignment-operator-precedence
三元运算符求值顺序 https://stackoverflow.com/questions/1445274/ternary-operator-evaluation-order

作为澄清,我知道括号使它起作用,正如我在原始帖子中的评论所表明的那样......

我只是想知道为什么语言作者会选择一种很可能欺骗人们的评估方法,而第一个语句似乎可以在编译器方面进行格式化以使其有效。

但这些问题涉及左侧或类成员内的操作员,因为这种奇怪的行为发生在 RHS 上。


这里有什么奇怪的?第一部分解释为:

(11 + (k != 7)) ? 1 : 11

第二个被解释为

 11 + ((k !=7) ? 1 :11)

第一个是由优先级规则引起的(二元算术的优先级高于三元运算符),第二个是通过用括号对表达式进行分组来规避优先级规则。

你的编辑询问原因,人们通常只能猜测这些原因,除非当时在场的 C 委员会有人过来帮忙。我的猜测是,使用复杂表达式并询问其真值比使用三元运算符来确定算术表达式的值要常见得多。我想到了这样的事情:

return (froble() + 3) == 0 ? 23 : 5; // parens for sanity but works without

如果这被解释为return (froble() + 3) == 5;我真的会感到震惊。

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

意外结果,Gnu C 中的三元运算符 的相关文章

随机推荐

  • 客户端Flash(SWF)应该如何与服务器端.NET通信?

    所以我在IIS7的服务器上运行ASP NET 我想我将使用 MVC 来处理一些静态页面和基本动态表单 但大多数客户端都是用 Flash ActionScript 编写的 在客户端和服务器之间构建 生成代理的最简单 最简洁 最DRY的方法是什
  • 如何在不写入文件的情况下将 DataVisualization.Charting.Chart 的图像获取到 iTextSharp.text.Image?

    我正在编写一个用于测量数据可视化的软件 为此 我使用 System Windows Forms DataVisualization Charting Chart 并且我确实知道我可以通过 ChartObj SaveImage 获取显示的图像
  • python dict.add_by_value(dict_2)?

    问题 gt gt gt a dict a 1 b 2 gt gt gt b dict b 3 c 2 gt gt gt c c a 1 b 5 c 2 因此 这个想法是通过 int float 值以最短的形式添加到字典中 这是我设计的一种解
  • SQL Server 如何决定隐式日期时间转换的格式?

    declare str datetime varchar 50 set str datetime 30 04 2012 19 01 45 30th April 2012 declare dt datetime datetime select
  • 不知道为什么 dcast() 这个数据集会导致变量丢失

    我有一个数据框 如下所示 id fromuserid touserid from country to country length 1 1 54525953 47195889 US US 2 2 2 54525953 54361607 U
  • 在日志文件中隐藏敏感/机密信息

    您将如何隐藏敏感信息以免进入日志文件 是的 您可以有意识地选择首先不记录敏感信息 但在一般情况下 您可能会盲目地记录失败时的错误消息或在调查问题等时跟踪消息 最终导致敏感信息登陆您的计算机 日志文件 例如 您可能尝试将包含客户信用卡号的订单
  • 如何忽略脚本内的 stdin 输入

    我有一个程序 myprogram 它在控制台上运行时等待输入键 当我们按下某个键后 它就会退出 我想在后台运行这个 myprogram 并忽略标准输入 我有一个示例脚本 示例 sh 脚本 myprogram exit 0 但当我跑步时 sh
  • 如何在 gdb 中中断 UBSan 报告并继续?

    GCC 和 Clang 的最新版本具有未定义行为清理程序 UBSan 它是一个编译标志 fsanitize undefined 添加运行时检测代码 出现错误时 会显示如下警告 packet ber c 1917 23 运行时错误 54645
  • 如何从日期/时间字段快速选择不同的日期,SQL Server

    我想知道是否有一个性能良好的查询来从 SQL Server 中带有日期时间字段的表中选择不同的日期 忽略时间 我的问题不是让服务器实际执行此操作 我已经看到这个问题 https stackoverflow com questions 887
  • ElasticSearch NEST 搜索

    当我尝试对 ElasticSearch 实例执行搜索时遇到意外错误 我正在关注这里的文档 http nest azurewebsites net nest quick start html http nest azurewebsites n
  • 如何在单击时展开文本区域

    我正在开发一个有文本区域的小项目 我需要帮助来使文本区域在鼠标单击时展开 就像 Twitter 和 Facebook 那样 文本区域首先应该看起来像一个文本字段 然后单击时应该展开 这可以在不使用 JavaScript jQuery 的情况
  • R中的时间序列

    我正在电子表格中跟踪我的体重 但我想通过使用 R 来改善体验 我试图在 R 中找到一些有关时间序列分析的信息 但没有成功 我这里的数据采用以下格式 date gt weight gt body fat percentage gt water
  • Angular 5 ngx-bootstrap 表单验证

    我正在读阿里 勒纳的书ng book在 Angular 5 上 我正在使用ngx bootstrap and Bootstrap 4 表单验证似乎并不像勒纳先生实现的那样工作 我不确定这是否是一个限制ngx bootstrap 有人知道吗
  • 显示数组内容的问题

    下面的代码将内容和图像保存到 varcontent i content and vacontent i images 然而 我在正确显示内容和图像的循环之外唯一得到的是 varcontent i content Print r 显示数组的所
  • ValueError:需要解压的值太多(预期为 2)

    在我正在使用的Python教程书中 我输入了一个示例同时分配 当我运行程序时 我得到了前面提到的 ValueError 但不明白为什么 这是代码 avg2 py A simple program to average two exam sc
  • 当应用程序未运行时,GCM 推送通知不会在某些设备中显示

    我在我的应用程序中实现了 GCM 推送通知 并且已成功完成 但在某些设备中 当应用程序关闭时 它不会显示通知 未显示通知的设备列表 Redmi 2 lenovo Gionee 谁能解释一下问题是什么以及我如何解决它 这是我的清单
  • 如何在 Android Management API 中为 Web 应用程序启用 kiosk 模式

    我们的一位客户希望通过网络应用程序启用单一信息亭模式 当我们应用此配置时 它不起作用 网络应用程序不会显示 并且设备无法使用 即使安装了 Chrome 应用程序 当信息亭模式被禁用时 网络应用程序完全可用 所以我猜 AMAPI 方面有问题
  • Numpy:将每一行除以一个向量元素

    假设我有一个 numpy 数组 data np array 1 1 1 2 2 2 3 3 3 我有一个相应的 向量 vector np array 1 2 3 我该如何操作data沿着每一行进行减法或除法 结果是 sub result 0
  • Android;强制 AppWidget 从 SD 卡工作?

    即使应用程序移至 SD 卡且 SD 卡未移动 是否有任何方法可以强制 AppWidget 工作 unmounted Docs http developer android com guide topics data install loca
  • 意外结果,Gnu C 中的三元运算符

    所以三元运算符的运算符优先级为C对我来说真的很奇怪 例证 include