C 逗号运算符的使用[重复]

2024-02-14

您会看到它在 for 循环语句中使用,但它在任何地方都是合法的语法。您在其他地方发现了它的哪些用途(如果有的话)?


C 语言(以及 C++)历史上是两种完全不同的编程风格的混合体,可以称为“语句编程”和“表达式编程”。如您所知,每种过程式编程语言通常都支持以下基本结构:测序 and 分枝 (see 结构化编程 https://en.wikipedia.org/wiki/Structured_programming)。这些基本结构以两种形式出现在 C/C++ 语言中:一种用于语句编程,另一种用于表达式编程。

例如,当您用语句编写程序时,您可能会使用由;。当你想做一些分支时,你可以使用if声明。您还可以使用循环和其他类型的控制传输语句。

在表达式编程中,您也可以使用相同的构造。这实际上是在哪里,运算符开始发挥作用。操作员,无非是 C 中顺序表达式的分隔符,即运算符,在表达式编程中的作用与;在语句编程中。表达式编程中的分支是通过?:运算符,或者通过短路评估属性&& and ||运营商。 (表达式编程没有循环。要用递归替换它们,您必须应用语句编程。)

例如下面的代码

a = rand();
++a;
b = rand();
c = a + b / 2;
if (a < c - 5)
  d = a;
else
  d = b;

这是传统语句编程的一个例子,可以用表达式编程重写为

a = rand(), ++a, b = rand(), c = a + b / 2, a < c - 5 ? d = a : d = b;

or as

a = rand(), ++a, b = rand(), c = a + b / 2, d = a < c - 5 ? a : b;

or

d = (a = rand(), ++a, b = rand(), c = a + b / 2, a < c - 5 ? a : b);

or

a = rand(), ++a, b = rand(), c = a + b / 2, (a < c - 5 && (d = a, 1)) || (d = b);

不用说,在实践中,语句编程通常会生成更具可读性的 C/C++ 代码,因此我们通常会以经过严格衡量和限制的数量使用表达式编程。但在很多情况下它很方便。可接受与不可接受之间的界限在很大程度上取决于个人喜好以及识别和阅读既定习语的能力。

附加说明:该语言的设计显然是针对语句量身定制的。语句可以自由调用表达式,但表达式不能调用语句(除了调用预定义的函数)。这种情况在 GCC 编译器中以一种相当有趣的方式改变,它支持所谓的“陈述表达式” http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC62作为扩展(与标准 C 中的“表达式语句”对称)。 “语句表达式”允许用户直接将基于语句的代码插入到表达式中,就像他们可以将基于表达式的代码插入到标准 C 中的语句中一样。

另一个补充说明:在 C++ 语言中,基于函子的编程发挥着重要作用,这可以看作是“表达式编程”的另一种形式。根据当前 C++ 设计的趋势,在许多情况下它可能比传统的语句编程更可取。

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

C 逗号运算符的使用[重复] 的相关文章

  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • Rx.NET 中是否有一个Subject 实现,其功能类似于BehaviourSubject,但仅在值发生更改时才发出?

    有没有Subject https learn microsoft com en us previous versions dotnet reactive extensions hh229699 v vs 103 Rx NET 中的实现在功能
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 处理右值时的 insert 与 emplace

    std string myString std unordered set
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • VS 2012 中的可变参数模板(Visual C++ 2012 年 11 月 CTP)

    我安装了Visual C 编译器 2012 年 11 月 CTP http www microsoft com en us download details aspx id 35515并创建了一个 C 控制台项目 我把这个写在 templa
  • 单态与单态

    当人们使用单态模式而不是单例来维护全局对象时 会出现什么情况 编辑 我知道什么是单例模式和单态模式 在很多场景中也实现了 Singleton 只是想知道MonoState模式需要实现的场景 案例 例如 我需要在 Windows 窗体应用程序
  • 如何设置 LIBUSB_INCLUDE_DIR

    我正在尝试为arm交叉编译libftdi 当我运行 Cmake 时 我得到 CMake Error The following variables are used in this project but they are set to N
  • 在 Iphone SDK 中显示 GPS 可用性和准确性

    如何编程以在 iPhone 中显示 GPS 可用性和准确度级别 并且它必须擦除标签中先前的纬度 经度信息 iOS sdk 中有一个类叫做 CLLocationManager 浏览 XCode 中的文档或查找一些示例 http mobileo
  • Jetpack Compose:如何以编程方式 onClick 将主题从浅色模式更改为深色模式

    TL DR 更改主题并在单击时在浅色和深色主题之间重新组合应用程序 你好 我有一个有趣的问题 我一直在努力解决 希望得到一些帮助 我正在尝试实现一个设置屏幕 让用户更改应用程序的主题 选择与系统设置匹配的深色 浅色或自动 我已成功设置主题动
  • 将值传递给 onclick [重复]

    这个问题在这里已经有答案了 如果我使用循环创建大量 HTML 元素 例如 for i 1 i lt 100 i var my element document createElement td row appendChild my elem
  • jquery Mobile url 添加 # 标签,该标签会破坏 Internet Explorer 中的表单

    大家好 我的问题是我有一个 jquery 移动网站 其链接与普通网站类似 例如 a href http mysite com login Login a 现在 当他们在 Firefox 等中转到该页面时 它会转到 http mysite c
  • c++: LLDB + Python - 如何在 python 脚本中打印 std::string

    我正在尝试 LLDB python 以便更好地将 json 字符串打印到文件中 对于给定的 std string 变量 称为缓冲区 我在 python 断点脚本中尝试了以下操作 以便漂亮地打印到文件中 全部都不成功 json dump fr
  • 使用 Selenium Webdriver 与 Stripe Card Element iFrame 交互 - Cucumber/Selenium Java

    我有一个表单 我想在 Java 中使用 Cucumber 和 Selenium Webdriver 来自动化 在这个表单中 我们有一个从 Stripe 中使用的卡片元素 我们称之为 div 剩下的由 stripe 完成 我不确定这是否是 i
  • 如何使用我的 flutter API 在表格日历上显示事件

    我有用于显示事件日历的 UI 并且需要显示 API 中的事件 但我不知道该怎么做 我尝试更改 event 上的列表 但没有响应 我需要在日历上显示它 以便我的公司日历可以显示该活动 这是我的 UI 日历 import package int
  • 新的 Firebase Facebook 登录

    我正在尝试使用新的 Firebase 平台登录 Facebook 这是 Facebook 登录的代码 let facebookLogin FBSDKLoginManager facebookLogin logInWithReadPermis
  • Python 文件关键字参数?

    在命令行中 我可以将参数传递给 python 文件 如下所示 python script py arg1 arg2 我可以找回arg1 and arg2 within script py as import sys arg1 sys arg
  • pimpl 使模板编码不那么混乱

    我正在尝试创建一个更清晰的头文件 以供头类的参考 文档使用 同时仍然认识到模板的便利性 所以我有一个快速的 h hpp 文件 mempool h namespace internal template
  • PHP 帖子名称通配符 - $_POST['var_'.*];

    是否可以使用某种通配符来创建以特定字符串开头的 POST 变量 本质上 我试图捕获任何包含 bSortable wildcard 作为名称的 POST bSortable 1 bSortable 2 bSortable 3 我正在为 jqu
  • 如何从向量创建元组?

    下面是一个示例 它分割字符串并解析每个项目 将其放入一个其大小在编译时已知的元组中 use std str FromStr fn main let some str 123 321 312 let num pair str some str
  • 如何解决 em_mysql2 的“连接仍在等待结果”错误

    我在 Goliath eventmachine 下将 activerecord 与 em mysql2 一起使用 最奇怪的事情发生在我的用户模型上 当我第一次向 users 发送 POST 时 一切正常 按预期查找 当我执行第二次 POST
  • 可以将 ASP.NET 编译为机器代码吗?

    是否可以将 ASP NET Web 应用程序编译为机器语言 如果是这样 有任何性能优势吗 是的你可以 NGen exe http msdn microsoft com en us library 6t9t5wcf aspx 这是一个 Sta
  • window.onbeforeunload 和 window.onunload 在 Firefox、Safari、Opera 中不起作用?

    在我的聊天应用程序中 当我的应用程序关闭时 我需要得到用户的确认 所以我用了window onbeforeunload用于确认警报和window onunload for logout 但这两个功能都可以在 IE 和 Chrome 中使用
  • 有什么方法可以返回对函数中创建的变量的引用吗?

    我想编写一个程序 分两步写入一个文件 在程序运行之前该文件可能不存在 文件名是固定的 问题是OpenOptions new write 可能会失败 在这种情况下 我想调用自定义函数trycreate 这个想法是创建文件而不是打开它并返回句柄
  • C 逗号运算符的使用[重复]

    这个问题在这里已经有答案了 您会看到它在 for 循环语句中使用 但它在任何地方都是合法的语法 您在其他地方发现了它的哪些用途 如果有的话 C 语言 以及 C 历史上是两种完全不同的编程风格的混合体 可以称为 语句编程 和 表达式编程 如您