Основы Git: http://git-scm.com/book/ru/Основы-Git
Очень хорошее введение в git: http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/ch01.html
Установка Git для linux:
debian/ubuntu/altlinux: sudo apt-get install git
rhel/fedora: sudo yum install git
Установка Git для windows: http://git-scm.com/download/win
Для linux: GCC, желательно версии 4.6 или более поздней
Для windows: http://www.cygwin.com/
Так же можно попробовать использовать MinGW:
Для 32-битных версий windows: http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Automated%20Builds/mingw-w32-bin_i686-linux_20121015.tar.bz2/download
Для 64-битных версий windows: http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Automated%20Builds/mingw-w64-bin_x86_64-linux_20121031.tar.bz2/download
Вне зависимости от того какой компилятор вы используете в процессе разработки, проверка заданий осуществляется на 64-битной версии Linux, используемая локаль - ru_RU.UTF-8
сборка: gcc -Wall -std=c99 main.c -o main
запуск: ./main
Обработка опций командной строки через getopt: http://www.ibm.com/developerworks/ru/library/au-unix-getopt/
Интернационализация и gnu gettext:
- http://fedoraproject.org/wiki/How_to_do_I18N_through_gettext
- http://www.gnu.org/software/gettext/
- http://ru.wikipedia.org/wiki/Gettext
- http://symmetrica.net/uploads/gtk/lesson2.htm
Часто задаваемые вопросы по C: http://c-faq.com/index.html
http://www.opennet.ru/docs/RUS/make_compile/make.html
5 лаб = 5000 баллов
1 лаба = 1000 баллов. Баллы выдаются за выполнение критериев оценки.
Пропуск пары - штраф. Для ОАиП это 100 баллов за одну пару.
Плагиат = -700 и переписывание с нуля.
лаба до дедлайна предыдущей = 1.2 * заработаные баллы
лаба до её дедлайна = 1 * заработаные баллы
лаба на n-ный день после дедлайна:
n < 14: (0.5+0.5*(14-n)/14) * заработаные баллы
n >= 14: 0.5 * заработаные баллы
Дополнительные баллы можно получить следующим образом:
- день с коммитами = 8 баллов
- выполнение дополнительного задания (берётся у преподавателя, доступно после выполнения основного)
Свои баллы можно посмотреть перейдя в локальный клон этого репозитория и выполнив команду:
./score.sh фамилия
Рейтинг можно посмотреть выполнив команду:
./rating.sh
- Базовое задание = 250
Программа выполняет то что указано в условии. Без данного критерия следующие не учитываются.
- Единый стиль и оформление, простейшая система сборки = 100
(Без данного критерия следующие не учитываются)
Используется стандарт Кернигана и Ричи с отступами в 4 пробела http://en.wikipedia.org/wiki/Indent_style#K.26R_style
Для автоматической корректировки наиболее удобно использовать утилиту indent.
- linux: устанавливается из репозиториев
- windows: http://gnuwin32.sourceforge.net/packages/indent.htm
Запускается так:
indent -kr -nut main.c
ВНИМАНИЕ!!! Если файл использует окончания строк в стиле windows, то
indent следует запускать тоже на windows, т.к. windows автоматически
конвертирует "\r\n" в "\n". Если нужно отформатировать код на linux,
то предварительно следует конвертировать переводы строк. Для этого
можно использовать программу dos2unix. Если этого не сделать, то после
запуска indent
файл превратится в месиво (т.к. под линуксом indent
ничего о виндовых переводах строк не слышал и "\r" воспринимается
просто как странный символ и не трогается. Если уже сделали, то
чинится так:
mv main.c main.c.orig
cat main.c.orig | tr -d "\r" > main.c
indent -kr -nut main.c
В простейшем случае Makefile выглядит следующим образом:
all:
gcc -Wall -std=c99 lab1.c -o lab1
- Простота в понимании, модификации и поддержке = 350
По имени функции сразу понятно что она делает. Нет переменных с однобуквенными именами. Единственное исключение - i,j,k в качестве переменных цикла (причём i всегда на первом уровне вложенности, j на втором и k на третьем). Иногда может использоваться n для указания количества, но только в случае, когда её смысл очевиден с первого взгляда.
Функции обязательно должны уметь обрабатывать ошибки во входных данных и сигнализировать о них. Так же функции должны обрабатывать сигналы об ошибках от вызываемых функций.
Логичное разбиение кода на функции. Каждая функция выполняет строго одну задачу (нет функций do_everything на сотню строк). Все повторяющиеся операции вынесены в функции. Нет дублирования кода.
Простота функции измеряется как цикломатическая сложность. Для каждой функции она не должна превышать 15 (см. http://msdn.microsoft.com/ru-ru/library/ms182212.aspx и http://ru.wikipedia.org/wiki/Цикломатическая_сложность ).
Для проверки используется утилита pmccabe.
pmccabe -v lab1.c
К примеру свои версии функций из стандартной библиотеки стоит вынести в mystdlib.h и mystdlib.c
Глобальные переменные есть только там где без них не обойтись (читай, "нет нигде").
Побочными эффектами называются любые действия функций, отличные от чтения аргументов, работы с локальными переменными и возврата значения. Функции имеющие побочные эффекты должны быть явным образом обозначены (к примеру, иметь имена начинающиеся на set_ или initialize_).
Если для определённой проблемы существует стандартное/ известное решение, изобретение своего не приветствуется. Исключением являются случаи когда создание своего решения требуется по заданию и предназначено для лучшего понимания материала, а так же когда использование известного решения это "overkill" (к примеру использование getopt когда нужно поддержать всего одну опцию командной строки).
Программа содержит только код, необходимый для решения задачи.
Проблемы решаются исправлением ошибок или архитектуры, а не вбиванием костылей.
Поскольку все возможные способы превратить сопровождение кода в ад перечислить невозможно.
- Наличие документация по использованию = 85
4.1 Описание программы (что она делает и для чего нужна) в файле README = 47
4.2 При запуске с аргументом -h (или при запуске без аргументов если использование без аргументов не предполагается) выводится руководство по использованию, после чего программа завершается = 38
- Безопасность и отказоустойчивость = 60
Обязательно: https://security.web.cern.ch/security/recommendations/en/codetools/c.shtml
Желательно: https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard
- Отсутствие перерасхода ресурсов = 55
Отсутствие утечек памяти (логично использовать valgrind), грамотное использование динамической памяти.
Разумный выбор алгоритмов, избегание полного перебора любой ценой.
Закрытие файлов по окончании работы с ними, освобождение мьютексов и иных системных ресурсов.
- Поддержка автоматической сборки = 50
Наличие Makefile или файла описания для генерации Makefile (CMakeLists.txt(CMake), SConstruct(SCons), configure.ac+Makefile.am (GNU Autotools), premake4.lua(Premake) и т.п.). При использовании CMake/SCons/premake/... обязательно наличие файла BUILD с описанием действий, необходимых для получения Makefile.
- Портируемость = 50
Основное: возможность сборки в режиме C89 и C99 на 32 и 64-битных платформах.
Дополнительное: возможность сборки компиляторами отличными от GCC (к примеру clang, intel, MS VC) и/или на платформах, отличных от Linux/UNIX.