私は最近書いた C プログラムでSplintを試し、それが与える警告を理解し、取り除こうとしています。私は理解しているが、それを削除する方法を理解できないのは、次のコード スニペットからのものです。
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;
}
Splint は、関数が NULL を返す可能性があることに満足していませんが、この場合は完全に理にかなっています。
/ @nullwhenfalse@ / を使用してみましたが、関数が true/false を返す場合にのみ機能するようで、retVal を使用するようにコードを変更しようとし、/ @null@ / と / @relnull@ / の両方を試しました宣言しましたが、これらは何もしませんでした。
(ちなみに、このテーブルはわずか 20 気圧しかないため、巧妙な検索アルゴリズムを使用しても意味がありません。)