Почему GNOME не использует C99?

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

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


person eduardo    schedule 20.05.2011    source источник
comment
Связанные stackoverflow.com/questions/2303502/   -  person dmckee --- ex-moderator kitten    schedule 20.05.2011


Ответы (3)


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

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

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

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

person onteria_    schedule 20.05.2011
comment
Странно, как они делают это утверждение, а затем включают всевозможные непереносимые предположения и код повсюду без надлежащих проверок конфигурации ... - person R.. GitHub STOP HELPING ICE; 20.05.2011

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

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

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

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

person unwind    schedule 20.05.2011
comment
Совершенно хорошая идиома, но каждый новый программист укусил в задницу тем, что (а) пытается использовать temporary после закрытия блока и (б) делает то же самое, когда temporary затеняет переменную из области видимости, так что появляется работать, но не так, как они ожидают. - person dmckee --- ex-moderator kitten; 21.05.2011

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

person R.. GitHub STOP HELPING ICE    schedule 20.05.2011
comment
Я писал C 25 лет и постоянно искал лучший способ объявления переменных. Я пришел к стилю, в котором они используются в циклах for, когда используются в основном или исключительно для подсчета цикла, и где вы не хотите привлекать внимание к ведению домашнего хозяйства. В противном случае, как правило, лучше объявлять их наверху, где их легко найти - обычно это тип, за которым следуют все переменные этого типа, чтобы все было в чистоте и не занимало слишком много вертикального пространства на экране. - person ; 06.09.2015
comment
Для меня общее правило - использовать стилистические штрихи, чтобы привлечь внимание к тому, что важно, и оставить домашнее хозяйство на заднем плане. Одна из величайших особенностей C - это возможность использовать функции, возвращающие значения, в качестве аргументов функции. Это широко используется в библиотеке C и приносит хорошие результаты. - person ; 06.09.2015