三字母(
trigraphs
)使用三个特殊的符号解析为对应符号的例如??(
映射为]
编译通过的示例
- 编译加入三字符选项
trigraphs
参数; - 如:
gcc -trigraphs trigr.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(int argc, char *argv??(??))
??<
printf("%s\n", "??!"); // |
printf("%s\n", "??("); // [
printf("%s\n", "??)"); // ]
printf("%s\n", "??<"); // {
printf("%s\n", "??>"); // }
printf("%s\n", "??'"); // ^
printf("%s\n", "??="); // #
printf("%s\n", "??-"); // ~
return 0;
??>
起源
- 在最初的Unix和C的时代使用ASR-33电传打字机时候,由于这个设备很慢,且支持的ASCII字符集视图以0x5f结束,导致了某些字符不能打印出来,以至于定义三字母来解决特定的ASR-33上的ASCII子集以及缺少高ASCII值的其他环境;
- 引入标准ISO/IEC646及其前身ASCII(ANSI X3.4),
详细请查看https://en.wikipedia.org/wiki/ISO/IEC_646#History
- 最后建议不要使用三字母,编写人们可以理解的代码。
部分对照表参考
三字母 | 含义 | |
---|---|---|
??( | [ | |
??) | ] | |
??< | { | |
??> | } | |
??’ | ^ | |
??= | # | |
??! | \ | |
??- | ~ | |
??(??) | [][] | |
??<??> | {} |