Автоматический инструмент для проверки условных кодов для C/С++

У нас есть студенты, которые представляют упражнения в курсе, в то время как они должны придерживаться некоторых условных кодов. Например, имена функций должны быть в camelCase. Длина функции не должна превышать 50 строк (задачи достаточно просты для разделения) и т.д. Я ищу инструмент, который может автоматически проверить, что для C/С++ (оба необходимы). То есть, я хотел бы, чтобы инструмент жаловался, когда что-то не так, поэтому студент может это исправить. До сих пор я не мог найти что-то подходящее. Если вещь открытая, и ее можно легко настроить для наших нужд, это будет o.k.

Ответ 1

Вы можете использовать инструмент unix indent для force для стиля C.

См

man 1 indent

когда он установлен.

Ответ 2

Один из этих инструментов с минимальной настройкой выполнит задание:

Программируемый инструмент проверки и анализа для С++: https://bitbucket.org/verateam/vera/wiki/Home
Проверка правил Google С++: http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py
EPITA University Norm Checker (студенческий проект): http://code.google.com/p/norme-checker/source/browse/

Ответ 3

QA-CPP может помочь здесь. Прошло более года с тех пор, как я использовал его, но вы можете настроить его таким образом.

Возможно, вы захотите дать ребятам в программе Research Research вызов и проверить, можете ли вы это сделать.

Однако остается вопрос: почему? Если бы мой лектор начал ругать меня за стиль кода над функциональностью, я бы подумал, что у него винт свободный. Как кто-то, кто прошел университетскую систему, вы должны готовить их для работы в реальном мире. Небеса знают, что я вижу, что сейчас проходит, оставляя желать лучшего.

Ответ 4

Существует редактор EditorConfig, который выглядит так, что он стремится стать инструментом для обеспечения стандартов кодирования для разных редакторов. Поддержка и функциональность ограничены, но это довольно хорошая идея. http://editorconfig.org/

Ответ 5

AFAIK visual studio premium и Ultimate имеет такой расширенный инструмент для анализа и тестирования инструментов. но они не являются бесплатными: (

Ответ 6

Doxygen создает XML-выход, который будет очень легко обрабатывать... Ну, по крайней мере, так же легко, как найти границы слов в идентификаторах.

Ответ 7

Вы можете использовать TIDY в режиме отладки, с небольшим количеством сценариев оболочки /perl.

В принципе, идея состоит в том, чтобы позволить tidy run и предоставлять вывод в другом .txt файле, который затем может быть проанализирован, чтобы обеспечить только выходы ошибки, и вы можете получить исходные строки кода и запустить DIFF: -)

Возможно, потребуется немного кодирования и создания сценариев. Мы использовали что-то подобное, но для совершенно другого проекта и цели.

В противном случае вы можете попробовать и использовать их:

http://gcgreatcode.sourceforge.net/
http://universalindent.sourceforge.net/

Это может немного помочь с проблемой, с небольшим количеством кодирования, чтобы перейти к вашей конкретной автоматической проверке.

Ответ 8

В некоторой степени в зависимости от уровня детализации и требуемых требований и готовности инвестировать (либо время, чтобы сделать это самостоятельно, либо деньги, чтобы заплатить кому-то), вы можете захотеть посмотреть clang: это компилятор C, С++ и Object-C, написанный на С++, который раскрывает свои внутренние структуры данных. Я использовал подключаемый модуль для проверки кода на различные ошибки, в основном на более мелкие, nitpicking. Поскольку компилятор предоставляет AST, он был, например, тривиальным, чтобы выплеснуть предупреждения, когда найдены приведения C-стиля (он может немного зашуметь на C-коде).

Хотя я не использовал его, clang может, по-видимому, также генерировать XML-представление своих внутренних структур данных. Если вам не нужно задавать такие вопросы, как "class A общедоступный базовый класс B" (т.е. Нетривиальные вопросы, требующие семантической проверки AST), это может быть более простой путь к инструменту, который вы описано. Фактически, в любом случае вы можете заставить своих учеников выполнить проверки: если у вас достаточно студентов и назначить одни и те же проверки более одного раза, чтобы убедиться, что вы вернули хотя бы одну хорошую реализацию, вы могли бы собрать аккуратную коллекцию довольно быстро.... и если ваши ученики похожи на меня (ну, я действительно не желаю вам такой же страшной судьбы, как это), они даже получат удовольствие от упражнений.

Одна вещь: не отметить любой программист на С++ для не с помощью CamelCase! HereIsASimpleAndImpressiveExampleOfWhyUseOfCamelCaseIsReallyBad: you_have_a_much_easier_time_to_read_this! Программисты на C++, как правило, делают правильную вещь. Таким образом, глупые мерзости, такие как CamelCase и венгерская нотация, не.