Почему вы не можете просто проверить, равен ли errno ERANGE?

Я пытался правильно преобразовать массив символов в длинный сstrtolпроверьте, не было ли переполнения или недостаточного заполнения, а затем выполните int на длинном. По пути я заметил много кода, который выглядит следующим образом

if ((result == LONG_MAX || result == LONG_MIN) && errno == ERANGE)
{
   // Handle the error
}

Почему ты не можешь просто сказать

if(errno == ERANGE)
{
    // Handle the error
}

Насколько я понимаю, если происходит переполнение или переполнение, errno устанавливается в ERANGE в обоих случаях. Так действительно ли первое необходимо? Может ли проверка ERANGE сама по себе быть проблематичной?

Вот так выглядит мой код на данный момент

 char *endPtr;
 errno = 0;
 long result = strtol(str, &endPtr, 10);

 if(errno == ERANGE)
 {
     // Handle Error
 }
 else if(result > INT_MAX || result < INT_MIN)
 {
    // Handle Error
 }
 else if(endPtr == str || *endPtr != '\0')
 {
     // Handle Error
 }

 num = (int)result;
 return num;

Если есть причина для первого, пожалуйста, дайте мне знать.

Ответы на вопрос(2)

Ваш ответ на вопрос