Тестирующая система ejudge использует автоматические скрипты проверки стиля кода. Для C++ используется утилита ((https://code.google.com/p/google-styleguide/ cpplint)) с ключами %% cpplint.py --filter=-legal,-readability/streams,-build/namespaces,-whitespace/braces,-whitespace/newline,-whitespace/line_length,-runtime/int,-runtime/threadsafe_fn,-readability/casting,-build/include_what_you_use,-runtime/arrays,-runtime/explicit,-build/include,-readability/fn_size,-runtime/printf,-whitespace/comments,-runtime/references,-readability/braces %%
Для Python используется утилита ((https://github.com/ShashkovS/flake8_ejudge flake8_ejudge))
Очень полное и подробное описание требований к коду на C++ содержится в ((https://tproger.ru/translations/stanford-cpp-style-guide/ руководстве по оформлению кода на С++ от Стэнфордского университета))
===Python=== Помимо сформулированных ниже правил, программы должны соответствовать документу ((http://www.python.org/dev/peps/pep-0008/ PEP8: Style Guide for Python Code)) из официальной документации языка Python (возможны отступления в части некоторых правил).
====Символы и отступы=== Величина отступа - четыре пробела. Использование символа табуляции (символа, с кодом 9) запрещается.
Последняя строка должна завершаться символом конца строки. Пустых строк в конце файла быть не должно. В конце любой строки не должно быть пробелов.
Функции должны отделяться двумя пустыми строками. Отдельные смысловые блоки в программе должны отделяться пустыми строками.
====Структура программы==== Программа начинается с подключения библиотек (import). Потом идут определения классов. Потом идут определения функций. Потом идет основная программа.
Запрещается подключать библиотеки и объявлять функции посередине кода.
====Имена переменных=== Имена переменных, функций, типов должны быть осмысленными и отражать назначение. Слишком длинные имена, однако, не рекомендуются. В именах допускаются сокращения, которые не затрудняют понимание имени и назначения функций и переменных.
Допускается использование односложных имен переменных для счетчиков (i, j, k), а также если это имя фигурирует в условии задачи (N, M, K, L), но не имеет какого либо смыслового значения (например, если в задаче написано "Проверьте число N на простоту", то обозначать переменной буквой n допускается. Если в задаче сказано "Дано число N - количество учащихся в классе", то не допускается).
В именах должны использоваться только английские слова. Транслитерации русских слов не допускаются. Запрещается использование символов, отличных от латинских букв, цифр и символа подчеркивания.
Если имя переменной или функции состоит из нескольких слов, то они должны разделяться символом подчеркивания. Например: count_max - допустимо count_of_elements_equal_to_maximal - недопустимо (слишком длинное) kolichestvo_maksimalnih - недопустимо (используется транслитерация) cm - недопустимо (непонятная аббревиатура)
Имена констант записываются полностью заглавными буквами, например, EPS, MAX_SIZE.
Названия классов должны записываться с заглавной буквы.
====Арифметические операции==== В одной строчке записывается одна арифметическая операция. Например:
%%(java) a = b b = c %%
Бинарные операции разделяются пробелом. После запятой ставится пробел. Между именем функции и скобками пробел не ставится, с внутренней стороны скобок пробелы не ставятся
%%(java) a = b + 2 * c a = (b + 2) * c print(a, b, sep = "") %%
====Использование констант=== Не допускается использование чисел в программе, значение которых неочевидно. Например, запись while i < 179 или c = c + 32 недопустима.
====Комментарии==== Комментарии в программах нужны для пояснения работы кода. Недопустимо использование комментариев для других целей, например, для удаления ненужного кода или для ASCII-арта.
====Комментарии==== Комментарии в программах нужны для пояснения работы кода. Недопустимо использование комментариев для других целей, например, для удаления ненужного кода или для ASCII-арта.
===C++===
====Символы и отступы=== Величина отступа - четыре пробела. Использование символа табуляции (символа, с кодом 9) запрещается.
Последняя строка должна завершаться символом конца строки. Пустых строк в конце файла быть не должно. В конце любой строки не должно быть пробелов.
Функции должны отделяться пустыми строками. Отдельные смысловые блоки в программе должны отделяться пустыми строками.
====Имена переменных=== Имена переменных, функций, типов должны быть осмысленными и отражать назначение. Слишком длинные имена, однако, не рекомендуются. В именах допускаются сокращения, которые не затрудняют понимание имени и назначения функций и переменных.
Допускается использование односложных имен переменных для счетчиков (i, j, k), а также если это имя фигурирует в условии задачи (N, M, K, L).
В именах должны использоваться только английские слова. Транслитерации русских слов не допускаются.
Если имя переменной или функции состоит из нескольких слов, то они должны разделяться символом подчеркивания или заглавными буквами. Например: ~CalcSqrt - допустимо calc_sqrt - допустимо calculate_square_root - допустимо, но нежелательно (слишком длинное имя) vychislenie_kornya - недопустимо (используются русские имена) f - недопустимо (непонятно назначение функции)
Имена констант записываются полностью заглавными буквами. Если имя константы состоит из нескольких слов, для их разделения используются подчеркивания. Например, EPSILON, MAX_SIZE.
Имена массивов и названия типов структур должны записываться с заглавной буквы.
====Арифметические операции==== В одной строчке записывается одна арифметическая операция. Например:
%%(java) a = b; b = c; %%
Бинарные операции разделяются пробелом. После запятой и после точки с запятой в цикле for ставится пробел. Между именем функции и скобками пробел не ставится, с внутренней стороны скобок пробелы не ставятся
%%(java) a = b + 2 * c; a = (b + 2) * c; x = power(a, n); %%
====Стиль отступов=== Если блок после инструкции if, for, while, else состоит из одной инструкции, то она пишется в отдельной строке с отступом.
=====if==== Оператор if без else записывается так: %%(java) if (test) { statements... } %%
Оператор if c else записывается так: %%(java) if (test) { statements... } else { statements... } %%
Последовательность if ... else if ... else if ... else записывается так: %%(java) if (test1) { statements... } else if (test2) { statements... } else { statements... } %%
=====while==== %%(java) while (test) { statements... } %%
=====do while==== %%(java) do { statements... } while (test); %%
=====for==== %%(java) for (int i = 0; i < n; ++i) { statements... } %%
=====Описание структуры==== %%(java) struct Person { string Name; int Age; }; %%
=====Реализация функции==== %%(java) double power(double a, int n) { statements... } %%
====Использование констант=== Не допускается использование чисел в программе, значение которых неочевидно. Например, запись while (i < 179) недопустима.
====Ввод-вывод=== Все сообщения об ошибках, предупреждения, отладочные сообщения и прочая диагностическая информация, не являющаяся результатом работы программы в предположении корректных входных данных, должна выводиться на стандартный поток ошибок stderr, то есть примерно так:
При выводе результата работы на стандартный поток вывода или в текстовый файл вывод должен заканчиваться символом перехода на новую строку. Исключением являются программы, выполняющие посимвольную обработку потока данных.
====Комментарии==== Комментарии в программах нужны для пояснения работы кода. Недопустимо использование комментариев для других целей, например, для удаления ненужного кода или для ASCII-арта.
====#define==== Никакие #define не нужны. Для определения констант нужно использовать const, вместо макросов нужно использовать функции, #define int long long не нужно вообще.
====typedef==== typedef скорее всего не нужны ни в каком виде. Нельзя переопределять стандартные типы при помощи typedef, а больше ни для чего typedef не нужен.
====#pragma==== Никакие #pragma не нужны.
---- адрес оригинала: ((/Информатика/ПравилаНаписанияПрограмм))