Я использую emacs как единственный программный редактор. Но в последнее время я часами бился над проблемами, которые в итоге оказались простыми ошибками с моей стороны. Например, написав if(n < n)
вместо if(n < N)
, или объявив функцию как bool вместо double:
bool foo() {
return 0.5;
}
Ни emacs, ни emacs не gcc -Wall
смогли обнаружить эти проблемы.
Есть ли IDE, которая может это сделать? Должно
Кроме того, я хотел бы
Поскольку вы уже используете emacs, мне интересно, может ли установка на него одного из многих линтеров с открытым исходным кодом предпочтительнее, чем IDE? Такой способ, вероятно, более гибкий, чем IDE, и вы можете оставаться в своем единственном истинном редакторе.
Для C++ есть следующие линтеры на выбор:
Если вы еще не подключены к своему редактору, Vim имеет Syntastic для их интеграции, чтобы ваш файл автоматически проверялся при вводе или сохранении.
Некоторые из них знают, как генерировать готовый для emacs вывод.
К сожалению, в моей системе ни gcc, clang_check, ни cpplint не жаловались на ваши два теста. Даже с g++ -ansi -pedantic -Wall -Wextra -Weffc++
.
Из приведенного выше списка cppcheck может быть тем, с наибольшей вероятностью поймающим ваши тестовые примеры, поскольку он является инструментом статического анализа («не компилятором», как говорится в документации).
На самом деле, это поймало ваш n<n
случай:
$ cppcheck --enable=all test.cc
[test.cc:17] -> [test.cc:17]: (style) Same expression on both sides of '<'.
Возможно, программист на C++ может объяснить, почему возврат чего-то, кроме объявленного логического значения в вашем тестовом примере, не является чем-то, о чем инструменты громко кричат.
Каждый линтер/компилятор, перечисленный выше, имеет множество опций — возможно, их чувствительность можно увеличить, чтобы поймать оба ваших случая.
Я понимаю, что вы просили IDE, но хороший редактор с плагинами и хорошей настройкой иногда неотличим от "IDE".
Я бы посоветовал вам хотя бы попробовать что-то вроде программного обеспечения для статического анализа кода, такого как c++ linter .
Хотя это частично решает вашу проблему, я обнаружил, что такие программы требуют очень высоких стандартов и поэтому очень напряжены в начале использования. Кроме того, согласно этому сообщению, у него возникают проблемы с обнаружением более сложных настроек.
Вим/Неовим?
Но, прежде всего, статические анализаторы имеют свое место и плохо подходят для редактирования вашего файла. Запускайте их после внесения изменений и перед фиксацией кода, тем самым удаляя любые распространенные изящные ошибки, которые могли появиться в вашем коде. Взгляните на oclint , cppcheck , clangcheck , clang-tidy , clang-static-analyzer .
Я могу назвать множество плагинов для улучшения вашего рабочего процесса, но наиболее важным является YouCompleteMe . Видите эти красные крестики на самом левом буфере? Они будут обновляться в фоновом режиме по мере ввода и сообщать вам, где вы могли допустить ошибку.
YouCompleteMe — это быстрый механизм завершения кода с нечетким поиском для Vim. Он имеет несколько двигателей завершения:
механизм на основе Clang, обеспечивающий собственное семантическое завершение кода для C/C++/Objective-C/Objective-C++ (отныне называемых «языками семейства C»),
механизм завершения на основе джедаев для Python,
механизм завершения на основе OmniSharp для C#,
механизм завершения на основе Gocode для Go,
механизм завершения на основе TSServer для TypeScript,
механизм завершения на основе Tern для JavaScript.
и многофункциональное средство завершения, использующее данные из универсальной системы Vim для обеспечения семантических дополнений для многих других языков (Ruby, PHP и т. д.).
Мог говорит восстановить Монику