【问题标题】:What is the meaning of `???-` in C++ code? [duplicate]C++代码中的`???-`是什么意思? [复制]
【发布时间】:2013-05-15 18:20:15
【问题描述】:

我从一些遗留代码中看到了以下代码:

 size_t a = 1 ???- 2 :0;

符号???- 在 C++ 中是什么意思?应该怎么理解?

【问题讨论】:

  • ??? 只能在 cmets 中使用。 :)
  • 为这个运算符想出一个虚假的含义会很有趣。 ???- 可能是“真的???我感到震惊!'运算符,?,例如向编译器提示第一个分支很少被采用。
  • 强制性 WTF 操作员提及:??!??!
  • Trigraphs 的存在是为了解决两个问题。首先,一些嵌入式系统仅支持非常有限的字符集,可能无法显示或输入“^”和“~”等字符。其次,一些操作系统支持多个代码页,这些代码页对“~”、“^”、“|”有不同的编码。等。确保您的代码支持所有代码页变体的唯一方法是使用三元组(这里看着您 IBM EBCDIC!)。
  • @JamesAnderson 嵌入式系统?你在抽什么?三元组不会影响程序功能或目标系统。它们实际上是源文件的字符编码,并为缺少键盘上某些键的用户提供了便利。 IBM 游说反对他们的弃用,因为据说它允许他们避免强迫他们的大型机用户对 EBCDIC 文本编码进行标准化。但大型机与嵌入式系统完全相反。

标签: c++ trigraphs


【解决方案1】:

其实是:

size_t a = 1 ? ~2 :0;

??-trigraph 对应于 ~


Trigraphs 来自一个古老的时代……甚至在我们中的一些人出生之前。

在过去,有些字符并不总是受支持。不知情的程序员会尝试输入这样的字符,却发现它在键盘上不存在!


图片来源:http://www.myoldmac.net/cgi-data/forum/phpBB2/viewtopic.php?t=305

因此添加了三元组以允许程序员在这些字符不存在时访问它们的功能(无论是在编码中还是通过键盘)。

如今,它们已经过时,并且在混淆读者方面比绕过旧标准更有效。

所以要么代码太旧,要么作者是个混蛋。

【讨论】:

  • 我看到通知在我点击前 10 毫秒出现了,我对此无能为力:p
  • 我投票给 (b),作者是个混蛋。 a = 1 ? ~2 : 0 被混淆为a = ~2。三元运算符的存在仅出于一个原因:混淆代码。添加三元组来混淆波浪号只是锦上添花。
  • “Trigraphs 来自旧时代。” -- Trigraphs 是由 1989 年 ANSI C 标准添加到语言中的。它们从未被移除; 2011 ISO C 标准仍然有它们。
  • 如果作者不是一个混蛋,并且在那种情况下确实需要三合符,那么它应该写成? ??-而不是???-以便于理解。
  • @vsz 其实我认为如果作者关心可读性,那应该是? compl 2 而不是? ??- 2
【解决方案2】:

??- 是波浪号 ~ 字符的三元组;该行相当于:

size_t a = 1 ? ~2 :0;

【讨论】:

    【解决方案3】:

    ??-~ 字符的三元组。其他一些三元组是:

     ??= for #
    
    ??/ for \
    
    ??' for ^
    
    ??! for |
    

    现在三联词的使用已经很少见了。

    【讨论】:

    • “现在使用三元组非常少见。” - SO 中没有。
    • @Yawz 我认为他们会选择~ 而不是??-,如果只是为了字符计数。
    猜你喜欢
    • 2015-10-08
    • 2017-08-21
    • 2023-03-19
    • 2013-10-06
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2020-07-09
    相关资源
    最近更新 更多