Почему GNOME не использует C99? - PullRequest
5 голосов
/ 20 мая 2011

Глядя на исходный код бормотания и , кроме исходного кода , оба по-прежнему используют стиль C89 объявления всех переменных в самом начале функции вместо того, где она используется впервые ( ограниченная сфера это хорошо). Почему они не используют C99? GNOME 3 был запущен недавно, и Mutter довольно новый, так что это могло бы стать хорошей возможностью для переключения, если бы причиной была совместимость со старым стилем кода.

Означает ли это, что добавление кода в GNOME должно быть написано на C89?

Ответы [ 3 ]

4 голосов
/ 20 мая 2011

Обоснование может быть связано с тем же обоснованием, что и Glib и GTK +:

  • Нет комментариев или объявлений C99.

Обоснование: мы ожидаем, что GLib иGTK + может быть встроен в различные компиляторы, а поддержка C99 еще не получила широкого распространения.

Источник: http://live.gnome.org/GTK+/BestPractices

2 голосов
/ 20 мая 2011

Говоря о области видимости, я думаю, что вы все еще можете сделать это:

if (condition)
{
  int temporary = expression();
  trigger_side_effect(temporary);
}

Другими словами, каждая действительная область в скобках может содержать новые объявления переменных, даже в C89.Многие люди кажутся удивленными этим;с этой точки зрения нет никакой разницы между областью верхнего уровня функции и любой другой областью, содержащейся в ней.Переменные будут видны во всех областях, начиная с той, которая их объявила.

Обратите внимание, что я не знаю, поддерживается ли это руководством по стилю GNOME, но, по крайней мере, поддерживается C89 и рекомендуемой техникой(мной), чтобы все было как можно более локально.

1 голос
/ 20 мая 2011

Многие люди считают объявление переменных везде, а не в начале блока, плохим стилем.Это немного облегчает поиск объявлений и делает так, чтобы вам приходилось проверять всю функцию, чтобы найти их все.Кроме того, по какой-либо причине объявления после операторов были одной из последних функций C99, реализованных GCC, поэтому долгое время это было главным соображением совместимости.

...