Стандарты кодирования GNU (Vmgu;gjmd tk;njkfgunx GNU)
Стандарты кодирования GNU это набор правил и рекомендаций для написания программ, совместимых с GNU. Стандарты кодирования GNU были написаны Ричардом Мэттью Столлманом и другими волонтерами проекта GNU. Документ стандарта является частью проекта GNU и доступен на web-сайте GNU. Таким образом он фокусируется на написании свободного программного обеспечения для GNU на языке C, большая часть которого может быть применена более широко. В частности проект GNU поощряет своих участников, которые пытаются следовать стандартам независимо от того, написаны ли их программы на C или нет. Стиль форматирования кода 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 С; также как и обязательный пробел перед скобками. Во всём отформатированном коде по стилю GNU каждая закрывающая фигурная, круглая или квадратная скобки находятся на одинаковом отступе от начала экрана с соответствующими открывающими скобками.
Можно полагаться на GNU Emacs в вопросах форматирования кода в стиле GNU.
Комментарии
[править | править код]Стандарты придают особое значение комментариям на английском языке:
Пожалуйста, пишите комментарии в программе GNU на английском, потому что английский является одним из языков, который понимают программисты практически во всех странах. Если Вы не владеете письменным английским в достаточной степени, пожалуйста, пишите комментарии на английском настолько хорошо, насколько у Вас это получается, затем попросите других людей помочь переписать их. Если Вы не можете писать комментарии на английском, пожалуйста, найдите кого-нибудь для работы с Вами и перевода Ваших комментариев на английский.
Комментарии должны состоять из завершенных, написанных прописными буквами предложений, перед которыми находятся два пробела (чтобы Emacs знал, где начинается одно и заканчивается другое предложение).
Для длинных или трудноразрешимых условных выражений препроцессора каждая из директив #else
и #endif
должны иметь комментарий, объясняющий условие для кода ниже (для #else
) или выше (для #endif
).
Файлы
[править | править код]Стандарт требует, чтобы все программы были способны функционировать, когда /usr
и /etc
смонтированы на чтение. Поэтому файлы, которые модифицируются для внутренних целей (файлы для записи информации, файлы блокировок, временные файлы, и т. д.) не должны сохраняться в /usr
или /etc
. Исключение сделано для программ, в задачи которых входит обновление системных конфигурационных файлов в /etc
. Другое исключение сделано для сохранения файлов в каталоге, когда пользователь явно просит модифицировать файл в нём.
Портируемость
[править | править код]Стандарты оформления кода GNU ставят вопрос портирования таким образом: портируемость в мире Unix означает 'между Unix-системами'; в программе GNU эта разновидность портируемости желательна на высоком качестве, но не обязательна.
Согласно стандарту, портируемость программ очень ограничена, так как GNU программы спроектированы для компиляции одним GNU C компилятором, и для запуска только на одной системе GNU.[источник не указан 3250 дней]
Существует другая проблема портирования: несмотря на тот факт, что программа должна запускаться на различных типах процессоров, стандарт говорит, что GNU не поддерживает и не будет поддерживать 16-битные системы, но поддержка всех различных 32-х и 64-битные систем абсолютно необходима.