C/C++标准术语
C/C++标准术语
什么是 ill-formed(非良构)
C/C++ 标准将程序分为几类:
| 类型 | 含义 |
|---|---|
| Well-formed(良构) | 符合所有语法和语义规则的程序(合法) |
| Ill-formed(非良构) | 违反了语法或约束的程序(不合法),编译器会抛出警告,但是未必会终止编译。要严格遵守良构,需要加 -pedantic-errors 或 -Werror |
| Ill-formed, no diagnostic required(非良构,不要求诊断) | 违反了语法或约束的程序(不合法),且编译器可以不报错也不警告,未必会终止编译 |
| Undefined behavior (UB)(未定义行为) | 程序语法合法,但执行行为未定义(如访问未初始化的变量),编译器未必给出诊断,可以做任何事情 |
注意:ill-formed ≠ 编译失败!它只表示“不符合标准”,但编译器可以选择如何处理(报错、警告、甚至静默接受)。
什么是 diagnostic required(要求诊断)
当程序违反了某些特定语法规则或约束时,C/C++ 标准强制要求编译器必须给出至少一条诊断信息(diagnostic message)。
诊断信息可以是:
- Error(错误) → 通常停止编译
- Warning(警告) → 可能继续编译
注意:“必须诊断” ≠ “必须拒绝编译”!只要输出了 warning 或 error,就算满足了标准要求。

浙公网安备 33010602011771号