Перевел @rlacresh

norme.en.v.3.0.pdf

Норма. Версия 3.0

Описание: Этот документ описывает используемый стандарт (Норма) в системе 42. Стандарт программирования представляет собой набор правил, которых необходимо придерживаться при написании кода. Вы должны всегда следовать Норме во всех проектах Школы, если не указано обратное.

Содержание

I Предисловие

II Норма

II.1 Наименование II.2 Форматирование II.3 Функции II.4 Typedef, struct, enum и union II.5 Headers

I Предисловие

II.6 Макросы и препроцессоры II.7 Запрещенное! II.8 Комментарии II.9 Файлы II.10 Make-файлы

Норма написана на python и имеет открытый исходный код. Репозиторий доступен по адресу https://github.com/42School/norminette. Предложения и исправления, приветствуются!

II Норма

II.1 Наименование

▪ Имя struct должно начинаться с s_. ▪ Имя typedef должно начинаться с t_. ▪ Имя union должно начинаться с u_. ▪ Имя enum должно начинаться с e_. ▪ Имя глобальной переменной должно начинаться c g_. ▪ Имена переменных, функций, названия файлов и папок должны содержать буквы нижнего регистра, цифры и '' (Unix Case). ▪ Нельзя использовать символы, не входящие в стандартную таблицу ASCII. ▪ Имена переменных, функций, и другие идентификаторы должны использовать змеиный_регистр. Никаких прописных букв. Слова разделены нижним подчеркиванием. ▪ Все идентификаторы (функции, макросы, типы данных, переменные и пр.) должны быть на английском языке. ▪ Объекты (переменные, функции, макросы, типы, файлы или же папки) должны иметь настолько соответствующие и запоминающиеся имена, насколько это возможно. ▪ Глобальные переменные запрещены, кроме тех случаев, когда явно указано обратное. ▪ Файлы должны компилироваться.

II.2 Форматирование

▪ Отступ в файлах должен быть равен 4 пробелам. Отступ является реальной табуляцией, а не четырьмя последовательными пробелами. ▪ Каждая функция должна содержать не более 25 строк, не считая фигурных скобок самой функции. ▪ Каждая строка должна быть не шире 80 столбцов, включая комментарии. Предупреждение: табуляция подсчитывается как 4 пробела, а не как 1 столбец. ▪ Каждая функция должна быть отделена от предыдущего кода новой строкой, кроме комментариев или команд препроцессора, которые могут располагаться прямо над функцией. После каждой функции должны быть пустая строка. ▪ Одна инструкция на строку. ▪ Пустая строка должна быть пустой: никаких дополнительных пробелов и табов. ▪ Строка никогда не должна заканчиваться пробелами и табами. ▪ У вас никогда не может быть двух подряд идущих пробелов. ▪ Вы должны начать новую строку после каждой фигурной скобки и управляющей структуры. ▪ После каждой запятой или точки с запятой следует ставить пробел, только если это не конец строки. ▪ Операторы или операнды должны быть отделены одним, и только одним, пробелом. ▪ После каждого ключевого слова языка C должен следовать пробел, кроме слов-типов (таких как int, char, float итд), а также sizeof. ▪ Каждое объявление переменной должно иметь отступ в том же столбце, что и его область видимости. ▪ Звездочки указателей должны стоять вплотную к именам переменных. ▪ Лишь одно объявление одной переменной на одну строку. ▪ Нельзя в одной строке одновременно объявлять и инициализировать переменную, за исключением глобальных переменных(когда это разрешено), статических переменных и констант. ▪ Объявления переменных должны быть в начале функции и должны быть отделены от остального кода пустой строкой. Больше нигде в функции, пустых строк быть не должно. ▪ Множественные присваивания строго запрещены. ▪ Вы можете добавить новую строку после инструкции или управляющей структуры, но вам придется добавить отступ в скобках или оператор присваивания. Операторы должны быть в начале строки.

II.3 Функции

▪ Функция может иметь не более 4-х именованных параметров. ▪ Функция, которая не принимает аргументы, должна быть явно прототипирована с помощью слово «void» в качестве аргумента. ▪ Параметры в прототипах функций должны иметь имена. ▪ Каждая функция должна быть отделена от другой пустой строкой. ▪ Вы не можете объявить более 5 переменных в блоке. ▪ Возвращаемое значение из функции, должно быть заключено в скобки. ▪ Между именем функции и её возвращаемым типом должна быть одиночная табуляция. (картинка пример)

II.4 Typedef, struct, enum и union

▪ При объявлении struct, enum или union, используйте табуляцию. ▪ При объявлении переменной типа struct, enum или union используйте 1 пробел в type. ▪ При объявлении struct, enum or union с помощью typedef, вы должны выровнять в одну линию имя typedef и имя struct / union / enum. ▪ Вы должны сделать отступ для всех имен структур в одном столбце для их области видимости. ▪ При объявлении переменной типа struct, enum или union используйте 1 пробел с type.

II.5 Headers

▪ В заголовочных файлах разрешены следующие вещи: включения заголовка (системные или нет), объявления, определения, прототипы и макросы. ▪ Все включения должны быть в начале файла. ▪ Вы не можете включать С файлы. ▪ Мы должны защищать заголовочные файлы от двойных подключений. Если имя файла ft_foo.h, ему соответствует макрос FT_FOO_H. ▪ Неиспользуемые заголовки (.h) запрещены. ▪ Все включения заголовка должны быть обоснованы как в файле .c, так и в файле .h. (картинка пример)