C++17 那些事之删除三字母

2024-05-17 14:27:41 浏览数 (1)

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等编译器默认禁用三字母组。

0 人点赞