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,就算满足了标准要求。

posted @ 2026-01-30 09:21  3的4次方  阅读(0)  评论(0)    收藏  举报