Сейчас я пишу набор тестовых ситуаций содержащих типичные ошибки в коде.
например:
int main( void )
{
int arr[ 100 ];
int i;
int k;
for (i = 0; i <= 100; ++i) // переполнение массива
{
arr[ i ] = i;
}
if (i > 200) // невыполнимое условие
{
k = 99;
}
arr[ k ] = 0; // переменная k не определенаreturn 0;
}
По этим ситуациям оценивается крутость инструмента (по кол-ву найденных ошибок).
Не поможете придумать небольшие примерчики с ошибками (особенно для C++), а то в голову мало что приходит?
Что-то типа этого, но это я взять не могу т.к. получится не обьективно
#include <iostream.h>
int sum = 0;
class Add
{
public:
Add( int a, int b, int c ) { sum += a; Add x(b,c); }
Add( int a, int b ) { sum += a; Add x(b); }
Add( int a ) { sum += a; Add x(); }
Add() { cout << sum; sum = 0; }
};
int main()
{
Add x( 21, 15, 9 );
return 0;
}
Где тут баг, факт что он есть (т.е. на экран ничего не выводиться), но почему?
Здравствуйте, menify, Вы писали:
M>Вот, увидел такой пример:
M>
<...>
M> Add( int a ) { sum += a; Add x(); }
<...>
M>
M>Где тут баг, факт что он есть (т.е. на экран ничего не выводиться), но почему?
Потому что,
Add x();
является не обьявлением обьекта x типа Add, а прототипом функции без параметров, которая возвращает Add.
Для того, что бы твой тест заработал достаточно убрать скобки:
Аналог lint для виндов, да и просто развитием инструмента, занимается некая компания... Похоже, что ссылка именно на нее. Если это так, то у них на сайте ведется рубрика Bug of the day (или month)... (на который их lint, вроде как указывает). Собственно, просмотри ее и ее архив, попадаются весьма интересные примеры. (Если что не так, см. в google.com)
Например, запомнилась такая его возможность: он отслеживает случаи когда в списке инициализации конструктора программер опирается на порядок инициализации(конструирования) членов, да еще есть несоответствие порядка в списке и порядка объявления членов класса.. (Порядок инициализации гарантирован и в его использовании нет крамолы, но если не соблюсти соответствие порядков объявления и в списке инициализации, то легко накосячить и рассматриванием кода это трудно увидеть)