这是什么?????!运算符在C中做什么?

2023-11-23

我看到一行C,看起来像这样:

!ErrorHasOccured() ??!??! HandleError();

它编译正确并且似乎运行正常。看起来它正在检查是否发生了错误,如果发生了,它就会处理它。但我不太确定它实际上在做什么或它是如何做的。看起来程序员确实正在尝试表达他们对错误的感受。

我从未见过??!??!之前在任何编程语言中,我在任何地方都找不到它的文档。 (谷歌不支持搜索词,例如??!??!)。它有什么作用以及代码示例如何工作?


??! is a trigraph这意味着|。所以它说:

!ErrorHasOccured() || HandleError();

由于短路,其等效于:

if (ErrorHasOccured())
    HandleError();

本周大师(涉及 C++,但与这里相关),我在那里找到了这个。

三字母组的可能起源或者正如 @DwB 在评论中指出的那样,这更有可能是由于 EBCDIC 很困难(再次)。ThisIBM Developerworks 委员会上的讨论似乎支持这一理论。

摘自 ISO/IEC 9899:1999 §5.2.1.1,脚注 12(h/t@随机832):

三字母序列允许输入未在不变代码集中定义为的字符 ISO/IEC 646 中描述,它是七位 US ASCII 代码集的子集。

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

这是什么?????!运算符在C中做什么? 的相关文章

随机推荐

  • 通过 MySQL 数据库更改发送 WebSocket 更新哪个更有效

    我目前正在尝试使用 WebSockets 以减少 消除在潜在的低带宽环境中对持续 AJAX 请求的需求 所有设备都兼容 WebSocket 所以没有问题 我试图将其保留为原生 PHP WebSocket 没有 Node js 或其他框架 库
  • 什么是智能指针?何时应该使用智能指针?

    什么是智能指针 何时应该使用智能指针 UPDATE 这个答案相当古老 因此描述了当时 好的 即 Boost 库提供的智能指针 从 C 11 开始 标准库已经提供了足够的智能指针类型 因此您应该倾向于使用std unique ptr std
  • 对话框后面显示的垫选择选项

    我将表单输入 带有选项的垫选择和带有选项的自动完成字段也包含到垫对话框中 问题是选项显示在对话框后面 我已经遇到过这些解决方案解决方案1但并没有解决这个问题 这是我的代码
  • CMake - 如何使库的私有标头可供其测试使用?

    因此 我正在将项目的一部分制作为一个库 其中一些标头是该库的接口 其余部分是库本身私有的 因此 对于我的库 CMAKE 部分如下所示 add library PROJECT NAME PROJECT SOURCES PROJECT BINA
  • 接收 KeyError:“[Int64Index([ ... dtype='int64', length=1323)] 均不在 [列] 中”

    SUMMARY 当将测试和训练数据输入 ROC 曲线图中时 我收到以下错误 KeyError Int64Index 0 1 2 dtype int64 length 1323 都不在 列 中 该错误似乎是说它不喜欢我的数据格式 但它在第一次
  • 使用 Bouncy Castle 生成密钥对

    我有使用 BC 生成密钥对的 Java 代码 如下所示 KeyPairGenerator keyGen KeyPairGenerator getInstance RSA keyGen initialize 1024 KeyPair key
  • 确定性哈希函数可以轻松解密吗? [复制]

    这个问题在这里已经有答案了 可能的重复 是否可以解密 md5 哈希值 是否可以逆转 sha1 我问了这个问题 使用巨大的电子表格 并得到了很好的答案 我听从了建议 我用这个 http splinter com au blog p 86 我对
  • 链接服务器在 SQL Server 作业上失败

    我有一个链接服务器 在执行查询时可以完美运行 但是当我将查询放入作业中时 它失败了 这是我的链接服务器的设置 Error Read 当作业使用链接服务器时 SQL Server 代理作业失败 替代方法 要解决此问题 请使用以下方法之一 方法
  • 如何在 .NET Framework 4.7.2 中引用 System.Management.Automation?

    我启动了一个新的 NET Framework 4 7 2 库项目 我需要自动化 PowerShell 脚本 但 Visual Studio 参考中添加 UI 的 框架 选项卡未将 System Management Automation 列
  • Android:ListView 中的 EditText 问题

    我的应用程序中有一个列表视图 它基本上是一个调查问卷 因此用户需要填写一些编辑文本 我遇到过以下问题 某些 EditText 需要数字输入 因此我将相应 xml 类型中的 inputType 设置为数字 但是 当我单击 EditText 时
  • 为什么 Guava 的 TypeToken.getRawType() 返回 Class<?超级 T> 而不是 Class

    来自 Effective Java Second Edition 第 28 条 不要使用通配符类型作为返回类型 这不会为用户提供额外的灵活性 而是会迫使他们在客户端代码中使用通配符类型 public final Class
  • 使用 Nashorn (JSR 223) 和预编译进行 Java 脚本编写

    我通过 JSR 223 使用 Nashorn 来执行用户输入脚本的小片段 public Invocable buildInvocable String script throws ScriptException ScriptEngine e
  • AWS Lambda 和 SNS:跨区域调用 Lambda

    我有一个部署到多个区域的 Lambda 函数 我想向 SNS 发布一条消息来调用这些函数 我使用 aws cli 创建了主题 授予 Lambda 与 SNS 通信的权限 并创建订阅 订阅似乎已成功创建 我可以在 AWS 控制台中看到它 但是
  • 为什么对域名后的第一个斜杠进行 url 编码会破坏 url?

    萨尔维特 我发现某种 url 编码方式会破坏链接 作为记录 2f代表正斜杠字符 现在 考虑一下 原文链接 http dottech org 95285 this is the pacific barreleye a fish with a
  • 方法名称为空,这实际上是做什么的?

    我目前正在自学 Objective C 和 iOS 编程 发现自己由于这个微妙的错误而陷入了无法工作的代码一个小时 考虑以下代码 property strong nonatomic NSString name NSString name r
  • Bootstrap-Datetimepicker 不适用于 jQuery 3

    Bootstrap datetimepicker 不适用于 jQuery 3 1 1 我需要使用相同的 jQuery 库来运行所有其他依赖函数 我遇到同样的错误 input size is not a function TypeError
  • 递归数组类型打字稿

    说我有类型type Atom string boolean number 我想定义一种数组类型 例如 NestedArray Atom a 0 a 1 a n 其中每个a i is an Atom or a NestedArray 这可以在
  • 1093 MySQL 表被指定两次时出错

    我正在尝试更新一些行 我只想更新 ID 0 的行 我收到的错误消息是 1093 表 ch 15 posts 被指定两次 既作为 UPDATE 的目标又作为单独的数据源 这是我正在使用的代码 欢迎大家提出意见 UPDATE ch 15 pos
  • 从基类创建子类的克隆副本

    考虑这种情况 public class Base public int i public class Sub Base public void foo do stuff 然后我想 举个例子Base获取一个克隆实例Sub 在本例中 i 17
  • 这是什么?????!运算符在C中做什么?

    我看到一行C 看起来像这样 ErrorHasOccured HandleError 它编译正确并且似乎运行正常 看起来它正在检查是否发生了错误 如果发生了 它就会处理它 但我不太确定它实际上在做什么或它是如何做的 看起来程序员确实正在尝试表