悬挂 else · else 永远配最近的未匹配 if

缩进会骗人,编译器不看缩进 —— 想让 else 归外层,必须用花括号 {}
① 一段有歧义的代码 if (a) 外层 if if (b) s1; 内层 if else s2; 这个 else 配谁? 缩进让人以为 else 对齐 if (a) 但编译器只看语法,不看空格缩进 编译器配对 你以为(被缩进误导) else 配 if (a) → a 为假就走 s2 实际(配对规则) else 配 if (b) 最近的未匹配 if → 只有 a 真 且 b 假,才走 s2 以为 实际 ② 想让 else 真正归外层 if(a)?加花括号 {} if (a) { if (b) s1; } else s2; ← 现在 else 配 if(a) 花括号 {} 关闭了内层 if 内层 if (b) 被 {} 包住、已闭合, 不再是「未匹配的 if」。 于是 else 只能与外层 if (a) 配对。 原则:缩进给人看,花括号给编译器看。