Эта статья включает список общих ссылок , но в ней отсутствуют соответствующие встроенные цитаты . ( Сентябрь 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 ( "Это муми-тролль." ); 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]
{{cite web}}
: Отсутствует или пусто |title=
( помощь )