Я пробовал Splint с недавно написанной программой на языке C и пытался понять и удалить предупреждения, которые она выдает. . Один я понимаю, но не могу понять, как его удалить из следующего фрагмента кода:
static MyType_t *findById(const int id)
{
int i;
for (i = 0; i < MY_ARR_SIZE; i++) {
if (my_arr[i].id == NOT_SET) {
/* Items are sorted so that items with
NOT_SET as ID are at the end of the array */
break;
}
if (my_arr[i].id == id) {
return &(my_arr[i]);
}
}
return NULL;
}
Сплинту не нравится, что функция может возвращать NULL, но в данном случае это имеет смысл.
Я пытался использовать /@nullwhenfalse@/, но, кажется, это работает только в том случае, если функция возвращает true/false, а также пытался изменить код для использования retVal и пробовал оба /@null@< /em>/ и /@relnull@/ перед объявлением, но они ничего не сделали.
(Кроме того, размер таблицы составляет всего 20 больших атм, поэтому нет смысла использовать умный алгоритм поиска.)
const int id
помогает компилятору предупредить вас, если вы случайно изменитеid
, что вы можете счесть желательным (хотя я бы не стал его использовать). - person Pascal Cuoq   schedule 19.11.2009