Перевел @rlacresh
Описание: Этот документ описывает используемый стандарт (Норма) в системе 42. Стандарт программирования представляет собой набор правил, которых необходимо придерживаться при написании кода. Вы должны всегда следовать Норме во всех проектах Школы, если не указано обратное.
II Норма
II.1 Наименование II.2 Форматирование II.3 Функции II.4 Typedef, struct, enum и union II.5 Headers
II.6 Макросы и препроцессоры II.7 Запрещенное! II.8 Комментарии II.9 Файлы II.10 Make-файлы
Норма написана на python и имеет открытый исходный код. Репозиторий доступен по адресу https://github.com/42School/norminette. Предложения и исправления, приветствуются!
▪ Имя struct должно начинаться с s_. ▪ Имя typedef должно начинаться с t_. ▪ Имя union должно начинаться с u_. ▪ Имя enum должно начинаться с e_. ▪ Имя глобальной переменной должно начинаться c g_. ▪ Имена переменных, функций, названия файлов и папок должны содержать буквы нижнего регистра, цифры и '' (Unix Case). ▪ Нельзя использовать символы, не входящие в стандартную таблицу ASCII. ▪ Имена переменных, функций, и другие идентификаторы должны использовать змеиный_регистр. Никаких прописных букв. Слова разделены нижним подчеркиванием. ▪ Все идентификаторы (функции, макросы, типы данных, переменные и пр.) должны быть на английском языке. ▪ Объекты (переменные, функции, макросы, типы, файлы или же папки) должны иметь настолько соответствующие и запоминающиеся имена, насколько это возможно. ▪ Глобальные переменные запрещены, кроме тех случаев, когда явно указано обратное. ▪ Файлы должны компилироваться.
▪ Отступ в файлах должен быть равен 4 пробелам. Отступ является реальной табуляцией, а не четырьмя последовательными пробелами. ▪ Каждая функция должна содержать не более 25 строк, не считая фигурных скобок самой функции. ▪ Каждая строка должна быть не шире 80 столбцов, включая комментарии. Предупреждение: табуляция подсчитывается как 4 пробела, а не как 1 столбец. ▪ Каждая функция должна быть отделена от предыдущего кода новой строкой, кроме комментариев или команд препроцессора, которые могут располагаться прямо над функцией. После каждой функции должны быть пустая строка. ▪ Одна инструкция на строку. ▪ Пустая строка должна быть пустой: никаких дополнительных пробелов и табов. ▪ Строка никогда не должна заканчиваться пробелами и табами. ▪ У вас никогда не может быть двух подряд идущих пробелов. ▪ Вы должны начать новую строку после каждой фигурной скобки и управляющей структуры. ▪ После каждой запятой или точки с запятой следует ставить пробел, только если это не конец строки. ▪ Операторы или операнды должны быть отделены одним, и только одним, пробелом. ▪ После каждого ключевого слова языка C должен следовать пробел, кроме слов-типов (таких как int, char, float итд), а также sizeof. ▪ Каждое объявление переменной должно иметь отступ в том же столбце, что и его область видимости. ▪ Звездочки указателей должны стоять вплотную к именам переменных. ▪ Лишь одно объявление одной переменной на одну строку. ▪ Нельзя в одной строке одновременно объявлять и инициализировать переменную, за исключением глобальных переменных(когда это разрешено), статических переменных и констант. ▪ Объявления переменных должны быть в начале функции и должны быть отделены от остального кода пустой строкой. Больше нигде в функции, пустых строк быть не должно. ▪ Множественные присваивания строго запрещены. ▪ Вы можете добавить новую строку после инструкции или управляющей структуры, но вам придется добавить отступ в скобках или оператор присваивания. Операторы должны быть в начале строки.
▪ Функция может иметь не более 4-х именованных параметров. ▪ Функция, которая не принимает аргументы, должна быть явно прототипирована с помощью слово «void» в качестве аргумента. ▪ Параметры в прототипах функций должны иметь имена. ▪ Каждая функция должна быть отделена от другой пустой строкой. ▪ Вы не можете объявить более 5 переменных в блоке. ▪ Возвращаемое значение из функции, должно быть заключено в скобки. ▪ Между именем функции и её возвращаемым типом должна быть одиночная табуляция. (картинка пример)
▪ При объявлении struct, enum или union, используйте табуляцию. ▪ При объявлении переменной типа struct, enum или union используйте 1 пробел в type. ▪ При объявлении struct, enum or union с помощью typedef, вы должны выровнять в одну линию имя typedef и имя struct / union / enum. ▪ Вы должны сделать отступ для всех имен структур в одном столбце для их области видимости. ▪ При объявлении переменной типа struct, enum или union используйте 1 пробел с type.
▪ В заголовочных файлах разрешены следующие вещи: включения заголовка (системные или нет), объявления, определения, прототипы и макросы. ▪ Все включения должны быть в начале файла. ▪ Вы не можете включать С файлы. ▪ Мы должны защищать заголовочные файлы от двойных подключений. Если имя файла ft_foo.h, ему соответствует макрос FT_FOO_H. ▪ Неиспользуемые заголовки (.h) запрещены. ▪ Все включения заголовка должны быть обоснованы как в файле .c, так и в файле .h. (картинка пример)