代用记号 (Alternative Tokens)
什么是代用记号?
代用记号是 C 语言标准中定义的一系列运算符的替代拼写形式。它们主要是为了解决早期或某些非标准的键盘和字符集(如 ISO 646 标准的某些版本)缺少 C 语言所需的一些关键符号(如 {
, }
, [
, ]
, #
, ^
, |
, ~
)的问题而引入的。这些记号使得程序员可以在某些受限的环境下编写功能完全相同的 C 语言代码。
在代码中,它们与其对应的符号是完全等价的,编译器会将它们预处理或解析为对应的符号。
代用记号列表
代用记号主要分为两种:双字母组 (Digraphs) 和 三字母组 (Trigraphs)。
1. 双字母组 (Digraphs)
这些是两个字符的组合,用来替代单个标点符号。
双字母组 | 替代的符号 | 符号名称 |
---|---|---|
<% | { | 左花括号 |
%> | } | 右花括号 |
<: | [ | 左方括号 |
:> | ] | 右方括号 |
%: | # | 井号 (预处理符号) |
%:%: | ## | 双井号 (预处理中的标记连接) |
示例: 使用双字母组的代码看起来是这样的:
c
// 原始代码
int main() {
int arr[5] = {1, 2, 3, 4, 5};
return 0;
}
// 使用双字母组的等价代码
int main() <%
int arr<:5:> = <% 1, 2, 3, 4, 5 %>;
return 0;
%>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
2. 已被移除的三字母组
除了上述的代用记号,C 语言早期还有一个三字母组 (Trigraphs) 的概念,它们是三个字符的序列,以两个问号 ??
开头。它们在 C17 标准中被弃用 (deprecated),并在 C23 标准中被正式移除。现代编程中应避免使用,也无需了解。
三字母组 | 替代的符号 |
---|---|
??= | # |
??( | [ |
??) | ] |
??/ | \ |
??' | ^ |
??< | { |
??> | } |
??! | | |
??- | ~ |