Вопрос по lint, findbugs, c – Любые инструменты, чтобы поймать глупые ошибки в коде C?

11

У меня была неприятная опечатка, которая потратила впустую мое время и моего коллегуВремя было примерно таким:

for (i = 0; i < blah; i++); // 
Вы можете указать платформу. Не все инструменты будут работать без изменений на всех платформах. David Thornley
Мы'У нас был большой успех с использованием бейсбольной битой здесь. После того, как мы поймаем первую глупую ошибку, они не совершат другую! Danimal
Ах, проблема с точкой с запятой - это повторяющаяся проблема. Лишний, недостающий; это не имеет значения. Все они ведут к одному и тому же поиску боли в заднице, который длится вечно и приводит к "Doh!» и пощечина. У меня все еще есть время от времени. Jeff Yates

Ваш Ответ

11   ответов
0

Я бы посоветовал посмотреть, есть ли у вас возможностьприменять стандарты MISRA, Они были написаны с большой продуманностью и множеством правил, которые простой для проверки компилятором. Например, Правило, которое я использую, требует, чтобы все команды NOP имели свою собственную строку. Это значит, когда вы положили; в конце оператора цикла он из-за ошибки говорит, что его нетс собственной линии.

-1

В этой (старой) версииКак выстрелить себе в ногуи во многих других версиях в Интернете, C это всегда язык, который учитывает самую простую процедуру. При программировании на С, вы должны помнить это и быть осторожным. Если вы хотите защиту, выберите другой язык.

Эта поговоркаприписаны самому Бьярне Страуструпу (C ++). (Неправильно) процитировать: "

С легко выстрелить себе в ногу »

Стивен А. Лоу, тыправильно - см. ссылку Страуструпа. Вот почему я написал(MIS) цитата». gimel
цитата, которую я услышал, была "C позволяет легко выстрелить себе в ногу, но с C ++ это отрывает вам всю ногу " Steven A. Lowe
7

В дополнение кLykathea»предложение PC-LintВы также можете получить лучшую (или, по крайней мере, больше) диагностику, если повысите уровень предупреждения компилятора. Что-то вроде/W4 или же-Wall

Хотя я'я не уверен, что ваша конкретная проблема была бы решена с этим (MS VC не 'кажется, помечает его даже при всех включенных предупреждениях). Я думаю что'потому что этоне редкость идиома дляfor Циклы должны быть пустыми, когда работа выполняется как побочные эффекты выражений управления циклами.

4

Несколько вещей, которые спасли меня в прошлом, от моей головы:

  • Используйте, если(3 == бла), а не (бла == 3), потому что если вы ошиблись и наберете (3 = бла), компилятор будет жаловаться.

  • Использоватьвсе-предупреждение переключатель. Ваш компилятор должен предупредить вас о таких пустых выражениях.

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

  • Дон»не пытайтесь обойти какие-либо меры предосторожности, установленные компилятором или ОС. Они там для вашей простоты программирования.

Мне не нравится(CONST == var) условность. Это делает код гораздо менее читабельным. Инструмент статического анализа поможет вам никогда не печатать.(var = CONST) Jace Browning
0

ОК · C by Programming Research - еще один хороший инструмент статического анализа для C.

0

Хорошая подсветка синтаксиса сделает некоторые подобные случаи более заметными.

Или переформатировать как GNU отступ. reinierpost
0

Любая хорошая среда программирования GUI ("IDE» - Интегрированная среда разработки), такая как Eclipse, выдаст предупреждение в таком случае.

3

Я бы начал с изучениялубок а такжеGDB, Если вам нужны более продвинутые, используйте эти два инструмента. Но они - хорошее начало.

4

Также посмотрите налязг статический анализ

15

Да,PC-Lint это, вероятно, лучший доступный инструмент.

Я нахожу PC-Lint 's предупреждения должны быть загадочными и неясными в лучшем случае. anon
Но будьте готовы кмного предупреждений, если кодовая база любого размера и не имеетт Michael Burr
Правда о множестве предупреждений - но все они настраиваются индивидуально. Таким образом, вы можете отключить все, что вам нужно. Steve Fallows
2

GCC обладает большей частью функциональности, встроенной в Lint черезпредупреждающие флаги.

Дон»забудь -O2. luser droog

Похожие вопросы