这个决策可以和Glib和GTK+背后的决策联系起来:
原因:我们期望GLib和GTK+能够在各种编译器上构建,而C99支持还没有普及。
说到作用域,我想你仍然可以这样做:
if (condition)
{
int temporary = expression();
trigger_side_effect(temporary);
}
换言之,在C89中,每个实际的大括号包围的作用域都可以包含新的变量声明。许多人对此感到惊讶;从这个角度来看,函数的顶层作用域和其中包含的任何其他作用域之间没有区别。变量将在声明它们的作用域下降的所有作用域中可见。
请注意,我不知道GNOME样式指南是否支持这一点,但至少它受C89支持,并且是一种推荐的技术(由我提出),以尽可能地保持本地化。