Memor.の 2011-10-19 16:56 采纳率: 100%
浏览 248
已采纳

什么是 c? ! ? ! 接线员怎么说?

I saw a line of C that looked like this:

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

It compiled correctly and seems to run ok. It seems like it's checking if an error has occurred, and if it has, it handles it. But I'm not really sure what it's actually doing or how it's doing it. It does look like the programmer is trying express their feelings about errors.

I have never seen the ??!??! before in any programming language, and I can't find documentation for it anywhere. (Google doesn't help with search terms like ??!??!). What does it do and how does the code sample work?

转载于:https://stackoverflow.com/questions/7825055/what-does-the-c-operator-do

  • 写回答

4条回答 默认 最新

  • ?yb? 2011-10-19 16:58
    关注

    ??! is a trigraph that translates to |. So it says:

    !ErrorHasOccured() || HandleError();
    

    which, due to short circuiting, is equivalent to:

    if (ErrorHasOccured())
        HandleError();
    

    Guru of the Week (deals with C++ but relevant here), where I picked this up.

    Possible origin of trigraphs or as @DwB points out in the comments it's more likely due to EBCDIC being difficult (again). This discussion on the IBM developerworks board seems to support that theory.

    From ISO/IEC 9899:1999 §5.2.1.1, footnote 12 (h/t @Random832):

    The trigraph sequences enable the input of characters that are not defined in the Invariant Code Set as described in ISO/IEC 646, which is a subset of the seven-bit US ASCII code set.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题