Skip to content

中文对照表 ​

99 个关键字拼写 + 22 条预处理指令 —— 中英并列,写哪个都行。

下面按教程的课次整理(这是常用的一组,共 58 条)。 完整的 99 个拼写见发行包里的 docs\ 与中文诊断提示。


第 1 课 程序骨架 ​

| 汉语 | 英文 | 干什么 | | 整数 | int | 整数类型;整数 主函数() 里的 主函数 是 main 的汉语名 | | 主函数 | main | 程序入口。和 main 是同一个标识符,写哪个都行,但不能两个都写 | | 空型 | void | 「什么也不返回」 | | 返回 | return | 从函数返回 | | #包含 | #include | 把另一个文件的内容引进来 |

第 2 课 变量与类型 ​

| 汉语 | 英文 | 干什么 | | 整数 | int | 整数 | | 双精度 | double | 双精度浮点 | | 单精度 | float | 单精度浮点 | | 字符 | char | 单个字符 | | 布尔 | bool | 真/假 | | 真值 / 假值 | true / false | 布尔字面量 | | 自动 | auto | 类型由右边的值推出来 | | 常量 | const | 之后不许改 | | 长型 / 短型 | long / short | 更宽/更窄的整数 | | 无符号 / 有符号 | unsigned / signed | 有没有符号位 | | 空指针 | nullptr | 空指针值(不是类型) | | 大小 | sizeof | 某个类型/值占多少字节 |

第 3 课 运算符与符号 ​

| 汉语 | 等价英文 | 等价符号 | | 并且 | and | && | | 或者 | or | \|\| | | 并非 | not | ! | | 不等于 | not_eq | != | | 位与 | bitand | & | | 位或 | bitor | \| | | 异或 | xor | ^ | | 取反 | compl | ~ | | 与赋值 | and_eq | &= | | 或赋值 | or_eq | \|= | | 异或赋值 | xor_eq | ^= |

第 4 课 分支与循环 ​

| 汉语 | 英文 | 干什么 | | 如果 / 否则 | if / else | 分支 | | 选择 | switch | 多分支 | | 情形 | case | 选择里的一个分支 | | 默认 | default | 选择里的兜底分支 | | 对于 | for | 计次循环 / 范围遍历 | | 每当 | while | 先判断再执行 | | 执行 | do | 先执行一次再判断(搭配 每当 收尾) | | 跳出 | break | 结束整个循环 | | 跳过 | continue | 跳过本轮剩下的 |

第 5 课 函数 ​

| 汉语 | 英文 | 干什么 | | 空型 | void | 不返回值 | | 返回 | return | 返回值 / 提前结束 | | 自动 | auto | 让编译器推返回类型 | | 常量 | const | 只读参数 |

第 6 课 自己定义类型 ​

| 汉语 | 英文 | 干什么 | | 类型 | class | 定义类型(注意:不是「类」,汉语关键字一律不少于两个字) | | 结构 | struct | 默认成员公开的类型 | | 枚举 | enum | 枚举 | | 公开 / 私有 / 受保护 | public / private / protected | 访问说明符 | | 自身 | this | 指向当前对象 | | 虚拟 | virtual | 允许派生类改写 | | 重写 | override | 声明「我在改写基类的虚函数」 | | 最终 | final | 到此为止,不许再被继承/改写 | | 静态 | static | 属于类型本身,不属于某个对象 | | 新建 / 删除 | new / delete | 动态分配 / 释放 | | 使用 | using | 引进名字 / 起别名 | | 类型别名 | typedef | 起类型别名(老写法) |

第 7 课 模板与名域 ​

| 汉语 | 英文 | 干什么 | | 模板 | template | 声明模板 | | 类型名 | typename | 模板里表示「某个类型」 | | 名域 | namespace | 名域 | | 使用 | using | 引进名字 | | 常量表达式 | constexpr | 编译期就能算出来的常量/函数 |


预处理指令(22 条) ​

英文中文英文字数英文中文英文字数
------------------
#if#如果2#pragma#编译指示4
#ifdef#如果已定义5#embed#嵌入2
#ifndef#如果未定义5#module#模块2
#elif#否则若3#import#导入2
#elifdef#否则若已定义6#include_next#包含下一个5
#elifndef#否则若未定义6#warning#警告2
#else#否则2#ident#标识2
#endif#结束如果4#assert#断言2
#include#包含2#unassert#取消断言4
#define#定义2#line#行号2
#undef#取消定义4#error#错误2
拼写原因
------
__include_macros编译器内部拼写
__preprocessed_module写进 PCH / 模块文件(.pcm),动它影响二进制格式兼容
__preprocessed_import同上
__public_macro / __private_macro同上
sccs1980 年代 SCCS 遗留,Clang 默认报错
读取者位置作用
---------
指令分发IdentifierTable.cpp 的 lookupChineseDirective()非 ASCII 名字 → tok::pp_*
跳过路径PPDirectives.cpp 的 chineseDirectiveEnglishSpelling()中文拼写就地换成英文
依赖扫描DependencyDirectivesScanner.cpp 的 .Case(...) 表见第四节
观察结论
------
#模块 m; 报错忠实。英文 #module m; 也报「无效的预处理指令」—— PPDirectives.cpp:1455 要求引出名是模块上下文关键字,# 形式本来就不合法
#导入 "x.h"改动前就能用。导入 有 KEYMODULES 标志位 → tok::pp_import → HandleImportDirective。报的是「导入类型库是不受支持的 Microsoft 特性」,与 #import 一字不差
#断言 / #取消断言 报错忠实。case tok::pp_assert: break; 是上游未实现(FIXME),英文一样报错
#否则若 vs 否则是两个不同的标识符。汉字是 XID_Continue,词法做最长匹配,否则若 不会被切成 否则 + 若
如果 / 否则 既是关键字又是指令名正确,与英文 if / else 的双重身份一致。指令名在 ParsingPreprocessorDirective 下不做关键字映射
位置校核什么
------
verify_chinese_keywords.py 第 11.8 节正文(只查字符串字面量)里的可译指令必须是中文。自测四条:正文英文要被抓到;.def 的 include guard 不许被误伤;注释不许被误伤;#pragma 子名字层不许被误伤
diag_id_lookup.py check_protected_tokens引号里的指令拼写必须写成中文(原来这条把 '#embed' 当受保护记号要求原样保留)
diag_id_lookup.py --self-test指令例外本身 5 条用例;另外断言映射表真的读到了东西、且 pragma / __include_macros / sccs 不在表里

相关 ​

以 MIT / Apache-2.0 等宽松许可发布 · 联系作者 QQ:1396257961