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

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

for (i = 0; i < blah; i++); // 
 David Thornley19 июл. 2010 г., 17:40
Вы можете указать платформу. Не все инструменты будут работать без изменений на всех платформах.
 Danimal15 окт. 2008 г., 20:46
Мы'У нас был большой успех с использованием бейсбольной битой здесь. После того, как мы поймаем первую глупую ошибку, они не совершат другую!
 Jeff Yates15 окт. 2008 г., 22:00
Ах, проблема с точкой с запятой - это повторяющаяся проблема. Лишний, недостающий; это не имеет значения. Все они ведут к одному и тому же поиску боли в заднице, который длится вечно и приводит к "Doh!» и пощечина. У меня все еще есть время от времени.

Ответы на вопрос(11)

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

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

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

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

 Steven A. Lowe15 окт. 2008 г., 21:31
цитата, которую я услышал, была "C позволяет легко выстрелить себе в ногу, но с C ++ это отрывает вам всю ногу "
 gimel16 окт. 2008 г., 09:19
Стивен А. Лоу, тыправильно - см. ссылку Страуструпа. Вот почему я написал(MIS) цитата».

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

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

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

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

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

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

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

 Jace Browning29 июл. 2011 г., 22:33
Мне не нравится(CONST == var) условность. Это делает код гораздо менее читабельным. Инструмент статического анализа поможет вам никогда не печатать.(var = CONST)

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

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

 reinierpost17 февр. 2010 г., 02:00
Или переформатировать как GNU отступ.

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

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

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

Решение Вопроса

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

 anon06 янв. 2009 г., 23:13
Я нахожу PC-Lint 's предупреждения должны быть загадочными и неясными в лучшем случае.
 Michael Burr15 окт. 2008 г., 20:47
Но будьте готовы кмного предупреждений, если кодовая база любого размера и не имеетт
 Steve Fallows16 окт. 2008 г., 14:08
Правда о множестве предупреждений - но все они настраиваются индивидуально. Таким образом, вы можете отключить все, что вам нужно.

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

 luser droog30 июл. 2011 г., 08:06
Дон»забудь -O2.

Ваш ответ на вопрос