Значения функций
Иногда функции возвращают значения, которые нигде не используются; иногда в программах делается попытка использовать значения функций, которых они не возвращают. lint рассматривает данную проблему с нескольких точек зрения.
Если в теле функции встречается как оператор
return (выражение);
так и оператор
return ;
это настораживает; lint выдаст сообщение
function name has return(e) and return
Сложнее всего проанализировать тот возврат из функции, который происходит при достижении потоком управления ее конца. Рассмотрим пример.
f (a) { if (a) return (3); g (); }
Если условие ложно, f вызовет g, а затем завершится, не возвра- тив никакого определенного результата; такая конструкция будет причиной сообщения lint'а. Если g, подобно exit, никогда управ- ления не возвращает, сообщение тем не менее будет выдаваться, хотя на самом деле никакой ошибки нет. Комментарий
/* NOTREACHED */
в исходном тексте будет подавлять данное сообщение.
При анализе программы в целом lint выявляет ситуации, когда функция возвращает значения, которые иногда (или никогда) не используются. Если возвращаемые значения никогда не используются, в определении функции имеется некоторая неэффективность. Можно "легально" проигнорировать результат функции при помощи явного преобразования к типу void, например
(void) fprintf (stderr, "Файл занят. Попробуйте позже!\n");
Игнорирование результата может быть просто проявлением дурного стиля (например, частичное отсутствие проверок неудачного завершения функции).
Обнаруживаются и противоположные ошибки, то есть использование результата функции, который не возвращается. Проявления таких ошибок могут быть самыми серьезными и, что гораздо хуже, нестабильными, а их поиск с помощью отладчика весьма труден.