三字母(
trigraphs)使用三个特殊的符号解析为对应符号的例如??(映射为]
编译通过的示例
- 编译加入三字符选项
trigraphs参数; - 如:
gcc -trigraphs trigr.c1
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 - 最后建议不要使用三字母,编写人们可以理解的代码。
部分对照表参考
| 三字母 | 含义 | |
|---|---|---|
| ??( | [ | |
| ??) | ] | |
| ??< | { | |
| ??> | } | |
| ??’ | ^ | |
| ??= | # | |
| ??! | \ | |
| ??- | ~ | |
| ??(??) | [][] | |
| ??<??> | {} |