Почему GNOME не использует C99?
Глядя на исходный код и разборчивый исходный код, оба по-прежнему используют стиль C89 объявления всех переменных в самом начале функции вместо того, где она впервые используется (ограниченная область хороша). Почему они не используют C99? GNOME 3 был запущен недавно, и Mutter довольно новый, так что это могло бы стать хорошей возможностью для переключения, если бы причиной была совместимость со старым стилем кода.
Означает ли это, что добавление кода в GNOME должно быть написано на C89?
3 ответа
Обоснование может быть связано с тем же обоснованием, что и Glib и GTK+:
- Нет комментариев C99 или деклараций.
Обоснование: мы ожидаем, что GLib и GTK + будут построены на различных компиляторах, а поддержка C99 еще не получила широкого распространения.
Источник: http://live.gnome.org/GTK+/BestPractices
Говоря о сфере, я думаю, вы все еще можете сделать это:
if (condition)
{
int temporary = expression();
trigger_side_effect(temporary);
}
Другими словами, каждая действительная область в скобках может содержать новые объявления переменных, даже в C89. Многие люди кажутся удивленными этим; с этой точки зрения нет никакой разницы между областью верхнего уровня функции и любой другой областью, содержащейся в ней. Переменные будут видны во всех областях, начиная с той, которая их объявила.
Обратите внимание, что я не знаю, поддерживается ли это руководством по стилю GNOME, но, по крайней мере, оно поддерживается C89, и рекомендуемой (мной) техникой, чтобы все было как можно локальнее.
Многие люди считают объявление переменных повсеместным, а не в начале блока плохим стилем. Это немного облегчает поиск объявлений и делает так, чтобы вам приходилось проверять всю функцию, чтобы найти их все. Кроме того, по какой-либо причине объявления после операторов были одной из последних функций C99, реализованных GCC, поэтому долгое время это было главным соображением совместимости.