NULL
не обязательно имеет особое значение, когда оно возвращается из функции. Если вы хотите указать, что функция не завершилась успешно, обычным способом является возвращение некоторого значения, которое никогда не будет возвращено при нормальных обстоятельствах. Обычно это означает возврат неверного значения. Когда функция возвращает указатель, она часто использует NULL
в качестве возвращаемого значения, сигнализирующего об ошибке, поскольку указатель NULL
редко является значением, которое пользователь может ожидать от функции.
Константа NULL
имеет значение только в контексте указателей, и, поскольку вы возвращаете скалярное значение, компилятор говорит вам об использовании NULL
. Вместо того, чтобы возвращать NULL
, найдите какое-то значение, которое никогда не может быть допустимым возвращаемым значением, и используйте его в качестве индикатора ошибки. Чтобы было более понятно, что вы делаете, присвойте этому значению константу, используя #define AN_ERROR_OCCURED <<someval>>
, чтобы избежать использования "магических чисел".
Другой распространенный способ сделать это - использовать глобальный errno
( см. Errno.h ). Если ваша функция обнаруживает ошибку, установите errno
на ненулевое значение перед возвратом. Затем код, вызывающий вашу функцию, может проверять и обрабатывать ошибки, используя что-то вроде if (errno) {...}
.
Еще один метод состоит в том, чтобы функция возвращала ноль в случае успеха и ненулевой код ошибки в противном случае. Если пользователю необходимо получить данные из функции, в функцию должен быть передан дополнительный указатель «буфера возврата».