Стандарты кодирования GNU

Стандарты кодирования 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 ( "Это муми-тролль." ); else if ( foo . bar < GIZMO_SNUFKIN_THRESHOLD / 2 || ( strcmp ( foo . class_name , "snufkin" ) == 0 ) && foo . bar < GIZMO_SNUFKIN_THRESHOLD ) puts ( "Это снум-тролль." ); else { char * barney ; /* Указатель на первый символ после  последнего слеша в имени файла. */ int wilma ; /* Приблизительный размер вселенной. */ int fred ; /* Максимальное значение поля `bar'. */                                     делать { frobnicate ( & foo , GIZMO_SNUFKIN_THRESHOLD , & barney , & wilma , & fred ); twiddle ( & foo , barney , wilma + fred ) ; } while ( foo.bar > = GIZMO_SNUFKIN_THRESHOLD );                   store_size ( вилма );  перейти к проверке ; }   вернуть 0 ; } 

Последовательная обработка блоков как операторов (в целях отступа) является отличительной чертой стиля форматирования кода GNU C; как и обязательный пробел перед скобками. Весь код, отформатированный в стиле GNU, имеет свойство, что каждая закрывающая фигурная скобка, квадратная скобка или круглая скобка появляется справа от соответствующего ей открывающего разделителя или в том же столбце.

Будучи тесно интегрированным с системой GNU, GNU Emacs обеспечивает автоматическое форматирование кода C для соответствия стандартам кодирования GNU. [1] Вместо того, чтобы вручную изменять форматирование кода способом, отклоняющимся от стандартов кодирования GNU, форматированную структуру кода можно подправить, записав ее в более удобной для Emacs форме, например, вставив дополнительные скобки.

Разделение длинных строк

«Когда вы разбиваете выражение на несколько строк, разбивайте его до оператора, а не после него». [2]

Например:

если ( foo_this_is_long && bar > win ( x , y , z ) && remain_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 также не рекомендует использовать этот стиль; он отмечает пример кода, в котором он используется, значком «Coding Horror», символизирующим особенно опасный код, и утверждает, что он затрудняет читаемость, требуя дополнительного уровня отступа для фигурных скобок. [4]

Смотрите также

Ссылки

  1. ^ https://www.gnu.org/software/emacs/manual/html_mono/ccmode.html#index-GNU-style. {{cite web}}: Отсутствует или пусто |title=( помощь )
  2. ^ "Стандарты кодирования GNU". www.gnu.org . Получено 29.11.2020 .
  3. ^ «Стиль кодирования ядра Linux — Документация ядра Linux». www.kernel.org . Получено 12 октября 2017 г.
  4. ^ Макконнелл, Стив (2004). Code Complete: практическое руководство по созданию программного обеспечения. Редмонд, Вашингтон: Microsoft Press. С. 746–747. ISBN 0-7356-1967-0.
  • Стандарты кодирования GNU на веб-сайте GNU
  • Форматировщик стилей кода Eclipse для стандартов кодирования GNU
Взято с "https://en.wikipedia.org/w/index.php?title=GNU_coding_standards&oldid=1239309913"