·

写完上面的回复后,我意识到一些问题。

为什么 Python 和 Go 可以省略这些括号?

Python 的原因很简单,forifwhile 的起始语句都以 : 结尾,所以能够区分起始语句和它们的语句块。

Go 我并不熟悉,查了一下语言规范,在 Go 中,大括号是强制使用的:

if <simple-stmt> expression {
    ...
}

所以 if 后的起始语句和语句块也能够区分开来。

C 和类 C 语言就不同了,它们的起始语句必须有括号,但语句块可以没有大括号。在 C++ 中,对于以下语句:

for (;;i++) 1;

去掉括号就难以分辨语法成分了。

所以实际上这是一个二选一的问题,总要有一个界定符存在的。