Пример правильного оформленя кода C по нормам школы 21
Вот пример правильного оформления кода с комментариями (если будете загонять его на проверку - удалите комментарии)
Так же напоминаю, что если вас не просят написать main (как в этой функции), то делать это не надо.
Ниже будет список ошибок (которые удобно находить по command+F): буду редактировать и дополнять пост всеми ошибками, которые мне встретятся, с описанием их исправления.
Напоминаю, что для проверки стоит использовать команду norminette -R CheckForbiddenSourceHeader в директории с программой на с)
Для проверки файлов типа *.h используется только norminette, без флагов.
P.S. Спасибо за ваши лайки! Я чувствую, что писал этот пост не зря.)
P.S.S. А для любителей есть вот такая штука https://forum.intra.42.fr/topics/20837/messages/last12 - она позволяет раскрашивать вывод norminette.
Сейчас можно пользоваться Norminette из дома, а не только из школы программирования 21. Как настроить это в Linux Mint или Ubuntu смотрите в этом видео.
Так же напоминаю, что если вас не просят написать main (как в этой функции), то делать это не надо.
Ниже будет список ошибок (которые удобно находить по command+F): буду редактировать и дополнять пост всеми ошибками, которые мне встретятся, с описанием их исправления.
Напоминаю, что для проверки стоит использовать команду norminette -R CheckForbiddenSourceHeader в директории с программой на с)
Для проверки файлов типа *.h используется только norminette, без флагов.
P.S. Спасибо за ваши лайки! Я чувствую, что писал этот пост не зря.)
P.S.S. А для любителей есть вот такая штука https://forum.intra.42.fr/topics/20837/messages/last12 - она позволяет раскрашивать вывод norminette.
Ошибки в коде
Error: global scope bad aligned
- Найдите в своей функции строчку с объявлением функции вида int main.
- Удалите пробел после int и вставьте после него два ТАБ
- Вы восхитительны!
Error: 42 header not at top of the file
Вставьте заголовок 42 школы (fn+F1 в vim). Если он есть - попробуйте сделать его заново. (Ваш файл должен иметь расширение .с!)Error: must not begin by spaces/tabulations
-Уберите пробелы или дабы из началаError: bad indentation
-Проверьте отступы перед командами в функции! Должно быть как на примере. Только ТАБы, длиной в 4 пробела.Error: Space before FUNCTION_NAME
Замените пробел перед именем функции на ТАБ.Error: bad spacing after ft_print_comb
-После конца функции (после последней ‘}’) не правильно задано количество пустых строк: должна быть однаError: function XXXXXXXXX has XX lines
-Функция содержит слишком много строк! Максимум 25 строк!Error: declarations must be followed by one empty line in XXXXXXXXX
-Проверьте, как вы объявляете переменные! Расстановка пустых строк должна быть как на примере, и объявлять можно по одной переменной за раз! После объявления переменных должна быть пустая строка(смотри пример!).Error: missing space around <
-Не “a<b”, а “a < b”.Error: global scope bad aligned
- проверьте дабы перед именами функций. Названия функций должны быть одна над другой, строго, по всей программе! Для выравнивания используйте ТАБ.
declarations in XXXXXXXXX are bad aligned
-Проблема в объявлении переменных в функции. С помощью ТАБов выровняйте их так, чтобы они располагались одна над другой, красивым столбиком. Если есть типы данных с длинным названием, то перед короткими (типа int) прийдется ставить несколько ТАБов.Warning: /Users/XXXXXXXX may not compile or is invalid for some reasons.
-Проверьте базовый синтаксис С. Это можно сделать следующим образом: добавьте int main(){} в конец программы и скомпилируйте с помощью gcc - и он укажет на ошибки в программе.Error : declaration of ft_putchar forbidden in .c
-Вы запускаете norminette без флагов. Используйте norminette -R CheckForbiddenSourceHeader (Moulinette будет использовать такие же флаги!)Error: missing void in function main
-Если ваша функция не принимает на вход никаких аргументов, то это необходимо указать явно: int main(void){}.Error: multiple empty lines
-Просто удалите лишние пустые строки.Error : wrong number of spaces in preprocessor indentation
Перед define должен быть пробел: # defineСейчас можно пользоваться Norminette из дома, а не только из школы программирования 21. Как настроить это в Linux Mint или Ubuntu смотрите в этом видео.
Как запустить проверку норминетом?
ОтветитьУдалитьВ терминал набираем: norminette -R CheckForbiddenSourceHeader
Error: VAR is instanciated during declaration
ОтветитьУдалитьНельзя одновременно объявлять и инициализировать переменные в одной строке
+ плюсую, спасибо тем, кто дополняет эту статью! Удобно пользоваться!
УдалитьError: declarations must be followed by one empty line in XXXXXXXXX
ОтветитьУдалитьОтметил на данный момент следующую зависимость (может позже будет чем дополнить). Если в функции main есть что-то помимо вывода и ретёрна, выдаёт эту ошибку. Решилось пока только вынесением за блок и созданием глобальной переменной. Если кто что знает по этой теме, не поленитесь, отпишите, помогите облегчить плытиё бассейнистом, по типу вас, тех, кто когда-то доплыл...
У меня решалось добавлением пустой строки после объявления (declarations) переменных
УдалитьError: XXXXXXXXX not unixcase
ОтветитьУдалить-Вы назвали переменную неправильно, не в соответсвии со стилем. Например V, Var, variAble и т.д., короче, ругается на заглавные буквы.
и на вот это _4islo
УдалитьError: declarations in main must be at the top of the function
ОтветитьУдалитьНеобходимо помнить, что эта ошибка тесно связана с Error: VAR is instanciated during declaration (Нельзя одновременно объявлять и инициализировать переменные в одной строке). И вот, вы вроде бы разделили декларирование функции(оно же объявление функции) и её инстанциирование, инстанциацию (хотя это слово больше относится к классам, но всё равно его упоминаю, а по-просту обычное присваивание).
Почему не работает? И выдает ошибку, с которой я начал этот коментарий?
Просто: все декларирования переменных должны быть записаны в верху функции(будь-то main или любая другая). Затем их отделяем пробелом и только потом объявляем. Вот так! :)
З.Ы.: Надеюсь, то что я вывел, действительно так и поможет вам и мне. ;)
Спасибо за дополнения.
ОтветитьУдалитьПожалуйста попросите других пловцов и студентов дополнять данный мануал.
Круто написано спасибо. Но отчего у меня в ответ на обычный хидер с гита норминетта говорит, что в нем 82 символа в каждой строке. Хотя счётчик и Вима и vscode говорит о 80 символах
ОтветитьУдалитьПро ошибку header not at top of the file: убедитесь в наличии обоюдных скобок <> вокруг email'а
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитькак исправить "parameterized macros are forbidden"?
ОтветитьУдалитьСпасибо!
ОтветитьУдалитьВопрос может покажется странным, но случайно нет такой утилиты, которая причёсывает код под стандарт Norminette. А то, если честно, очень уныло привыкать к синтаксису по стандарту. На мой взгляд, очень тупо, когда вместо таба стоит пробел и за это вылетает ошибка. Или на каких-то строках можно писать комментарий, на каких-то нельзя.
ОтветитьУдалить