Стандарты кодирования 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.

Существует другая проблема портирования: несмотря на тот факт, что программа должна запускаться на различных типах процессоров, стандарт говорит, что GNU не поддерживает и не будет поддерживать 16-битные системы, но поддержка всех различных 32-х и 64-битные систем абсолютно необходима.

См. также 
 Gnits Standards

Внешние ссылки 
 Стандарты оформления кода GNU на сайт GNU
 Eclipse-специфичный стиль форматирования кода по GNU стандартам оформления кода

Культура движения за свободное программное обеспечение
Проект GNU
Исходный код