Пример правильного оформленя кода 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.
...  
 
 

Ошибки в коде

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 смотрите в этом видео.



Комментарии

  1. Как запустить проверку норминетом?

    В терминал набираем: norminette -R CheckForbiddenSourceHeader

    ОтветитьУдалить
  2. Error: VAR is instanciated during declaration

    Нельзя одновременно объявлять и инициализировать переменные в одной строке

    ОтветитьУдалить
    Ответы
    1. + плюсую, спасибо тем, кто дополняет эту статью! Удобно пользоваться!

      Удалить
  3. Error: declarations must be followed by one empty line in XXXXXXXXX

    Отметил на данный момент следующую зависимость (может позже будет чем дополнить). Если в функции main есть что-то помимо вывода и ретёрна, выдаёт эту ошибку. Решилось пока только вынесением за блок и созданием глобальной переменной. Если кто что знает по этой теме, не поленитесь, отпишите, помогите облегчить плытиё бассейнистом, по типу вас, тех, кто когда-то доплыл...

    ОтветитьУдалить
    Ответы
    1. У меня решалось добавлением пустой строки после объявления (declarations) переменных

      Удалить
  4. Error: XXXXXXXXX not unixcase

    -Вы назвали переменную неправильно, не в соответсвии со стилем. Например V, Var, variAble и т.д., короче, ругается на заглавные буквы.

    ОтветитьУдалить
  5. Error: declarations in main must be at the top of the function

    Необходимо помнить, что эта ошибка тесно связана с Error: VAR is instanciated during declaration (Нельзя одновременно объявлять и инициализировать переменные в одной строке). И вот, вы вроде бы разделили декларирование функции(оно же объявление функции) и её инстанциирование, инстанциацию (хотя это слово больше относится к классам, но всё равно его упоминаю, а по-просту обычное присваивание).

    Почему не работает? И выдает ошибку, с которой я начал этот коментарий?

    Просто: все декларирования переменных должны быть записаны в верху функции(будь-то main или любая другая). Затем их отделяем пробелом и только потом объявляем. Вот так! :)

    З.Ы.: Надеюсь, то что я вывел, действительно так и поможет вам и мне. ;)

    ОтветитьУдалить
  6. Спасибо за дополнения.
    Пожалуйста попросите других пловцов и студентов дополнять данный мануал.

    ОтветитьУдалить
  7. Круто написано спасибо. Но отчего у меня в ответ на обычный хидер с гита норминетта говорит, что в нем 82 символа в каждой строке. Хотя счётчик и Вима и vscode говорит о 80 символах

    ОтветитьУдалить
  8. Про ошибку header not at top of the file: убедитесь в наличии обоюдных скобок <> вокруг email'а

    ОтветитьУдалить
  9. Этот комментарий был удален автором.

    ОтветитьУдалить
  10. как исправить "parameterized macros are forbidden"?

    ОтветитьУдалить
  11. Вопрос может покажется странным, но случайно нет такой утилиты, которая причёсывает код под стандарт Norminette. А то, если честно, очень уныло привыкать к синтаксису по стандарту. На мой взгляд, очень тупо, когда вместо таба стоит пробел и за это вылетает ошибка. Или на каких-то строках можно писать комментарий, на каких-то нельзя.

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Проверка кода C online