C 那些事之删除三字母
C 17 之前,Trigraph 是用 ISO/IEC 646 等小字符代码编写程序的功能,在 C89 中引入。ISO/IEC 646 缺少 C 中使用的以下字符,因此??
请使用以下字符进行转义:
注:本节代码已放星球。
三字母内容 | 替换的内容 |
---|---|
??= | # |
??( | [ |
??) | ] |
??< | { |
??> | } |
??/ | |
??! | ` |
??- | ~ |
??' | ^ |
?
它被转义以防止被三字母表替换。
C 17三字母被删除,??=
等不再被替换。
示例
C 17之前:
代码语言:javascript复制std::cout << "??=" << std::endl;
std::cout << "??(" << std::endl;
std::cout << "??(" << std::endl;
输出:
代码语言:javascript复制#
[
??(
C 17及之后:
代码语言:javascript复制??=
??(
??(
现在可能由于Unicode等字符编码已经普遍存在,不再需要三字母组,而gcc等编译器默认禁用三字母组。