Стандарты кодирования GNU
Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( сентябрь 2009 г. ) |
Стандарты кодирования GNU — это набор правил и указаний по написанию программ , которые последовательно работают в системе GNU . Стандарты кодирования GNU были написаны Ричардом Столлманом и другими волонтерами проекта GNU. Документ стандартов является частью проекта GNU и доступен на веб-сайте GNU. Хотя основное внимание уделяется написанию свободного программного обеспечения для GNU на C , большая часть его может применяться в более широком смысле. В частности, проект GNU призывает своих участников всегда стараться следовать стандартам, независимо от того, реализованы ли их программы на C.
Форматирование кода
[ редактировать ]Стандарты кодирования GNU точно определяют, как форматировать большинство языка программирования C. конструкций Вот характерный пример:
int
main (int argc, char *argv[])
{
struct gizmo foo;
fetch_gizmo (&foo, argv[1]);
check:
if (foo.type == MOOMIN)
puts ("It's a moomin.");
else if (foo.bar < GIZMO_SNUFKIN_THRESHOLD / 2
|| (strcmp (foo.class_name, "snufkin") == 0)
&& foo.bar < GIZMO_SNUFKIN_THRESHOLD)
puts ("It's a snufkin.");
else
{
char *barney; /* Pointer to the first character after
the last slash in the file name. */
int wilma; /* Approximate size of the universe. */
int fred; /* Max value of the `bar' field. */
do
{
frobnicate (&foo, GIZMO_SNUFKIN_THRESHOLD,
&barney, &wilma, &fred);
twiddle (&foo, barney, wilma + fred);
}
while (foo.bar >= GIZMO_SNUFKIN_THRESHOLD);
store_size (wilma);
goto check;
}
return 0;
}
Последовательное обращение с блоками как с операторами (с целью создания отступов) является отличительной чертой стиля форматирования кода GNU C; как и обязательное пространство перед круглыми скобками. Весь код, отформатированный в стиле GNU, обладает тем свойством, что каждая закрывающая скобка, скобка или круглая скобка появляются справа от соответствующего открывающего разделителя или в том же столбце.
Будучи тесно интегрированным с системой GNU, GNU Emacs обеспечивает автоматическое форматирование кода C в соответствии со стандартами кодирования GNU. [ 1 ] Вместо того, чтобы вручную изменять форматирование кода таким образом, чтобы это отклонялось от стандартов кодирования GNU, форматированный макет кода можно изменить, написав его в более дружественной к Emacs форме, например, вставив дополнительные круглые скобки.
Разделение длинных строк
[ редактировать ]«Когда вы разбиваете выражение на несколько строк, разделяйте его перед оператором, а не после него». [ 2 ]
Например:
if (foo_this_is_long && bar > win (x, y, z)
&& remaining_condition)
Комментарии
[ редактировать ]В стандартах особо подчеркивается важность на английском языке комментариев :
Пожалуйста, пишите комментарии к программе GNU на английском языке, потому что английский — это единственный язык, который могут читать почти все программисты во всех странах. Если вы плохо пишете по-английски, пожалуйста, пишите комментарии на английском языке как можно лучше, а затем попросите других людей помочь их переписать. Если вы не можете писать комментарии на английском языке, найдите кого-нибудь, кто будет работать с вами и переведет ваши комментарии на английский язык.
Комментарии должны состоять из полных предложений, написанных с заглавной буквы, за каждым из которых следует два пробела (чтобы Emacs мог определить, где заканчивается одно предложение и начинается следующее).
Для длинных или сложных условных операторов препроцессора каждое #else
и #endif
должен иметь комментарий, объясняющий условие для приведенного ниже кода (для #else
) или выше (для #endif
).
Файлы
[ редактировать ]Стандарты требуют, чтобы все программы могли работать, когда /usr
и /etc
монтируются только для чтения. Поэтому файлы, измененные для внутренних целей (файлы журналов, файлы блокировки, временные файлы и т. д.), не следует хранить ни в /usr
или /etc
. Исключение составляют программы, в задачу которых входит обновление файлов конфигурации системы в /etc
. Другое исключение делается для хранения файлов в каталоге, когда пользователь явно попросил изменить файл в том же каталоге.
Портативность
[ редактировать ]Стандарты кодирования GNU определяют проблему переносимости следующим образом: переносимость в мире Unix означает «между Unix-системами»; в программе GNU такая переносимость желательна, но не жизненно важна.
Согласно стандарту, проблемы переносимости очень ограничены, поскольку программы GNU предназначены для компиляции с помощью одного компилятора, GNU C Compiler , и выполняются только в одной системе, то есть системе GNU.
Однако существует одна форма проблемы переносимости: стандарт ясно дает понять, что программа должна работать на разных типах процессоров . В стандарте говорится, что GNU не поддерживает и не будет поддерживать 16-битные системы, но поддержка всех различных 32- и 64-битных систем абсолютно необходима.
Критика
[ редактировать ]Стандарты кодирования GNU в основном используются проектами GNU, хотя их использование не ограничивается только проектами GNU.
Ядро Linux категорически не рекомендует использовать этот стиль для кода ядра и относится к нему уничижительно: «Во-первых, я бы предложил распечатать копию стандартов кодирования GNU, а НЕ читать ее. Сжечь их, это отличный символический жест. ". [ 3 ] Стив МакКоннелл в своей книге Code Complete также не советует использовать этот стиль; он помечает пример кода, в котором он используется, значком «Ужас кодирования», символизирующим особенно опасный код, и заявляет, что он ухудшает читаемость, требуя дополнительного уровня отступов для фигурных скобок. [ 4 ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ https://www.gnu.org/software/emacs/manual/html_mono/ccmode.html#index-GNU-style .
{{cite web}}
: Отсутствует или пусто|title=
( помощь ) - ^ «Стандарты кодирования GNU» . www.gnu.org . Проверено 29 ноября 2020 г.
- ^ «Стиль кодирования ядра Linux — Документация по ядру Linux» . www.kernel.org . Проверено 12 октября 2017 г.
- ^ МакКоннелл, Стив (2004). Code Complete: Практическое руководство по созданию программного обеспечения . Редмонд, Вашингтон: Microsoft Press. стр. 746–747 . ISBN 0-7356-1967-0 .