一尘不染

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

javascript

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

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

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

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


阅读 288

收藏
2022-02-09

共1个答案

一尘不染

??!是一个转换为 的三元组|。所以它说:

!ErrorHasOccured() || HandleError();

由于短路,这相当于:

if (ErrorHasOccured())
    HandleError();

本周大师(处理 C++,但在此处相关),我在哪里选择了这个。

三元组的可能起源在评论中指出,这更有可能是由于 EBCDIC 很困难(再次)。IBM developerworks 板上的讨论似乎支持该理论

来自 ISO/IEC 9899:1999 §5.2.1.1,脚注 12(h/t @Random832):

trigraph 序列支持输入未在 ISO/IEC 646 中描述的不变代码集中定义的字符,它是七位美国 ASCII 代码集的子集。

2022-02-09