C / C ++ и C # синтаксическая проверка, которая может быть запущена над списком файлов - PullRequest
2 голосов
/ 21 ноября 2011

Не могли бы вы порекомендовать мне средство проверки синтаксиса C / C ++ и C #, которое можно запустить из командной строки.У меня около 12000 файлов, написанных на C / C ++ и C #, около 1000 из них с ошибками, поэтому мне нужно найти эту кучу файлов, чтобы исправить их вручную.

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Для C и C ++ вы можете использовать gcc и g++ с флагом -fsyntax-only .Однако, как уже было сказано в комментариях, здесь не будет найдено неопределенных ссылок и других ошибок времени ссылки.

Компилятор Microsoft C / C ++ имеет аналогичный параметр .Хотя я не уверен, что он работает и с C #.

1 голос
/ 21 ноября 2011

Технически лучший способ сделать это - просто скомпилировать каждый файл. Настройка всех этих компиляций либо проста (потому что у вас есть сценарии сборки), либо будет h --- если у вас их нет, и разница может повлиять на ваш выбор решения.

Для C вам в значительной степени нужно запускать их через компилятор с включенным препроцессором. Если вы этого не сделаете, типичный C-код, содержащий макросы и условия препроцессора, вообще не будет обрабатываться.

Аналогично для C ++, хотя люди склонны меньше использовать препроцессор. Вам может не понравиться синтаксический анализатор исходного файла C ++, но любые синтаксические ошибки нужно будет проверить, чтобы выяснить, были ли они вызваны директивами препроцессора или макросами. Если вы не хотите настраивать сценарии компиляции, наш C ++ Formatter можно настроить для обработки кода без запуска препроцессора, поэтому он может быть полезен здесь. Он действительно анализирует файл, а затем распечатывает его; Вы можете просто проигнорировать часть prettyprint и проверить, имеет ли состояние выхода файл «OK» (без ошибок) или «not OK» (своего рода синтаксическая / семантическая ошибка).

В C # есть препроцессор, но он используется только в редких случаях. Вы можете найти похожий форматер C # у нас в нашем семействе форматеров для многих языков . Семейство обрабатывает не только определенный язык, но обычно несколько наиболее распространенных диалектов (GCC, MS, ...)

...