sup*_*cat 4 c trigraphs language-lawyer
在使用ASCII作为其字符集的C编译器上,字符文字的值'??<'将等于'{',即0x7B.什么将是字面的一个编译器,其字符集不值有一个{角色?
在字符串文字之外,编译器可以推断出??<应该具有与定义的开括号字符相同的含义,即使编译器字符集没有开括号字符.实际上,三字母的整个目的是允许使用可表示字符的序列来代替不可表示的字符.该规范要求三字符甚至在字符串文字中处理,然而,这令我感到困惑.如果编译器的字符集包含一个{字符,编译器可以允许'{'表示为'??<',但字符集包括{我看不出程序员不会简单地使用它.{但是,如果字符集不包含,这似乎是首先使用三字符串的唯一原因,编译器应该??<用什么可表示的字符代替?
在字符集没有{字符?的编译器上,该文字的值是多少?
没有这样的(符合)编译器.{是基本源字符集的一部分(C99中为5.2.1/3,C++ 11中为[lex.charset]/1).的基本执行字符集(什么程序使用在运行时)应包含基本来源字符集的至少所有成员(同5.2.1/3在C99,[lex.charset]/3在C++中11).
正如@Mankarse指出的那样,发明三字符不是为了支持缺少某些字符的编译器(同样,没有这样的编译器),而是支持人们键入缺少输入这些字符所必需的键的键盘.