Почему 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, поэтому долгое время это было главным соображением совместимости.

Другие вопросы по тегам