相关疑难解决方法(0)

C++中Trigraph序列的目的是什么?

根据C++'03标准2.3/1:

在进行任何其他处理之前,每个出现的以下三个字符序列之一("三字符序列")被表1中指示的单个字符替换.

----------------------------------------------------------------------------
| trigraph | replacement | trigraph | replacement | trigraph | replacement |
----------------------------------------------------------------------------
| ??=      | #           | ??(      | [           | ??<      | {           |
| ??/      | \           | ??)      | ]           | ??>      | }           |
| ??’      | ˆ           | ??!      | |           | ??-      | ˜           |
----------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

在现实生活中,这意味着代码printf( "What??!\n" );将导致打印,What|因为??!是一个被|字符替换的三字符序列.

我的问题是使用三字母的目的是什么?使用三字母有什么实际优势吗?

UPD:在答案中提到一些欧洲键盘没有所有标点字符,所以非美国程序员必须在日常生活中使用三字母组合?

UPD2:Visual Studio 2010默认情况下关闭了三字母支持.

c++ trigraphs c++03

119
推荐指数
6
解决办法
4万
查看次数

为什么int _ $ [:> = <% - !.0,}; 编译?

今天我发现了奇怪的语法

 int _$[:>=<%-!.0,};
Run Code Online (Sandbox Code Playgroud)

在一些旧代码中,但实际上代码没有被注释.似乎没有关于此行的编译错误的报告.我单独测试它也可以编译:

int main(){
    int _$[:>=<%-!.0,};
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么要编译?

c syntax

43
推荐指数
4
解决办法
3554
查看次数

C++ 1z为什么不删除有向图和三字母?

C++ 1z将删除trigraphs.IBM严重反对这一点(此处此处),因此似乎存在删除/不删除双方的争论.

但既然决定删除三角形,为什么要留下有向图?我认为没有任何理由可以保留有关三角形的原因(这显然不足以保留三角形).

c++ standards digraphs trigraphs c++17

24
推荐指数
1
解决办法
2379
查看次数

标签 统计

c++ ×2

trigraphs ×2

c ×1

c++03 ×1

c++17 ×1

digraphs ×1

standards ×1

syntax ×1