在使用ASCII作为字符集的C编译器上,字符字面值'??<'的值将等同于'{',即0x7B。如果编译器的字符集没有'{'字符,那么该字面值的值是多少呢?
在字符串字面值之外,编译器可以推断出'??<'应该具有与开括号字符定义的相同含义,即使编译器的字符集没有开括号字符。实际上,三字符序列的整个目的就是允许使用可表示的字符序列来代替不可表示的字符。规范要求甚至在字符串字面值内也要处理三字符序列,这让我感到困惑。如果编译器的字符集包含'{'字符,那么编译器可以允许'{'被表示为'??<',但如果字符集不包含'{',似乎程序员没有理由不直接使用其他可表示的字符。然而,如果字符集不包含'{',似乎使用三字符序列是唯一的选择,那么编译器会用什么可表示的字符来替换'??<'呢?
在字符串字面值之外,编译器可以推断出'??<'应该具有与开括号字符定义的相同含义,即使编译器的字符集没有开括号字符。实际上,三字符序列的整个目的就是允许使用可表示的字符序列来代替不可表示的字符。规范要求甚至在字符串字面值内也要处理三字符序列,这让我感到困惑。如果编译器的字符集包含'{'字符,那么编译器可以允许'{'被表示为'??<',但如果字符集不包含'{',似乎程序员没有理由不直接使用其他可表示的字符。然而,如果字符集不包含'{',似乎使用三字符序列是唯一的选择,那么编译器会用什么可表示的字符来替换'??<'呢?
??/
之外的任何三字母组合是否提供了任何功能,这些功能不能通过指定一个带有字符宏的.h文件来实现[例如,#define __LBR {
/#define __clbr 0x7B
/#define __SLBR __STRINGIZE(<:)
]? - supercat