`
provista
  • 浏览: 120697 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C/C++中的trigraph

阅读更多
C/C++ 为了照顾老一辈无产阶级革命家,他们的条件极其艰苦,键盘上缺了很多键,
无法输入下面九个字符:

    # \ ^ [ ] { } | ~

因此推出了 trigraph,
简单的讲就是把上面的每个字符用其他三个字符来代替,
替换的规则如下:

#: ??=
\: ??/
^: ??'
[: ??(
]: ??)
{: ??<
}: ??>
|: ??!
~: ??-


比如说,下面这个 C++ 程序:

#include <iostream>

int main() {
  std::cout << "[]" << std::endl;
}

可以改写成这样:

??=include <iostream>

int main() ??<
  std::cout << "??(??)" << std::endl;
??>

将 trigraph 替换成对应的字符发生在预处理之前,
因此 trigraph 可以在源码中的任何位置都可以用,
包括字符串内,函数体开头,预处理指令等。

有人说,如果那我就是用一个字符串常量,其中包含了 "??=" 怎么办?
比如说就是要打印两个问号接一个等号,怎么办?
很简单,把它拆开写, 为了打印出 "??=",我们把它拆成 "??" "=" 即可,
因为 C/C++ 在处理字符串字面值的时候,会把相邻的多个字符串字面值合并成一个,
而这个合并操作发生在 trigraph 替换之后,
下面的程序就可以正确的打印出两个问号和一个等号:

#include <iostream>

int main() {
  std::cout << "??" "=" << std::endl;
}


实测中,
VC 8 不给任何提示将 trigraph 替换成对应字符,
GCC 4.0.3 则要求加上编译参数 -trigraphs 才会做相应转换。

虽然 GCC 的做法是不符合标准的,但是更加安全。
更详细的情况可以参考标准 2.3。
分享到:
评论

相关推荐

    2021年最新 C/C++中文参考手册

    2021年最新 C/C++中文参考手册

    Dev-cpp5.4.0及API帮助文档 2018年蓝桥杯C语言/c++

    Dev-cpp5.4.0及API帮助文档 2018年蓝桥杯C语言/c++ 需要的同学可以下载使用

    C语言/C++集成开发环境 Dev-C++

    C语言/C++集成开发环境 Dev-C++。一款优秀的C/C++集成开发软件。

    c/c++中文帮助文档(API)

    c/c++中文帮助文档(API),包含c和c++所有的库函数

    C/C++中文文档(支持C++20和C18)和蓝桥杯C/C++组用的文档

    这个文档压缩包包含普通C/C++中文文档和蓝桥杯比赛时用的文档,C/C++中文文档是最新版,支持到C++20和C18,且包含以前版本的内容。蓝桥杯蓝桥杯C/C++组用的文档比正常文档更简略,但包含了ASCII码表。

    C语言/C++ 烟花表白代码

    C语言/C++ 烟花表白代码 C语言/C++ 烟花表白代码 C语言/C++ 烟花表白代码 C语言/C++ 烟花表白代码

    C语言/C++基础之冰墩墩源码

    C语言/C++基础之冰墩墩源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    C语言/C++基础之爱心源码

    C语言/C++基础之爱心源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    C语言/C++基础之爱心程序源码

    C语言/C++基础之爱心程序源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    c / c++ / cpp / stl 中文帮助文档手册chm格式下载

    c / c++ / cpp / stl 中文帮助文档手册chm格式下载 C/C++ 语言参考 基本C/C++ 预处理命令 操作符优先级 转义字符 ASCII码表 基本数据类型 关键字 标准 C 库: Standard C I/O Standard C String...

    C/C++程序设计学习与实验系统 V2008.13.part1

    课程设计指导、课程设计源程序、 Visual C++6.0中英文编译错误信息同步显示功能(并配有同步的60多个语法错误程序实例)、Turbo C++3.0常见编译错误信息、 Turbo C2.0 中英文编译错误信息同步显示功能、C语言专业词汇...

    二维码(QRcode)生成算法 C语言/C++源码

    #二维码(QRcode)生成算法 C语言/C++ 源码 1. 根据输入字符串识别编码模式; 2. 根据输入字符串长度选择合适的QRcode版本; 3. 将编码转换为二进制位流表示为数据码字; 4. 使用多项式生成纠错码; 5. 将数据码和...

    基于C语言/C++基础的跨年烟花代码

    C语言/C++基础之跨年烟花代码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    c语言/c++/qt图形界面

    c语言/c++/qt图形界面

    C/C++中文函数手册

    C/C++中文函数手册,C语言库函数速查手册..

    C语言/C++基础之跨年烟花代码

    C语言/C++基础之跨年烟花代码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    C语言/C++基础之圣诞树源码

    C语言/C++基础之圣诞树源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    C语言/C++基础之绘制图钉画源码

    C语言/C++基础之绘制图钉画源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    C语言/C++基础之实现绕线画代码

    C语言/C++基础之实现绕线画代码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

Global site tag (gtag.js) - Google Analytics