我看到一行 C 看起来像这样:
!ErrorHasOccured() ??!??! HandleError();
它编译正确,似乎运行正常。似乎它正在检查是否发生了错误,如果发生了,它会处理它。但我不确定它实际上在做什么或它是如何做的。看起来程序员确实在尝试表达他们对错误的感受。
我以前从未??!??!在任何编程语言中见过它,而且我在任何地方都找不到它的文档。(谷歌对搜索字词没有帮助??!??!)。它有什么作用以及代码示例如何工作?
??!??!
??!是一个转换为 的三元组|。所以它说:
??!
|
!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 代码集的子集。