Я видел эту реализацию strcmp
некоторое время назад, и у меня есть вопрос для чисто образовательных целей. Зачем нужно преобразовывать входные данные в 16-битные целые числа, выполнять математику, а затем преобразовывать обратно в 8 бит? Что не так с вычитанием в 8 бит?
int8_t strcmp (const uint8_t* s1, const uint8_t* s2)
{
while ( *s1 && (*s1 == *s2) )
{
s1++;
s2++;
}
return (int8_t)( (int16_t)*s1 - (int16_t)*s2 );
}
Примечание: код предполагает 16-битный тип int
.
EDIT:
Было упомянуто, что C делает преобразование в int
(предположим 32 бит) по умолчанию. Это тот случай, даже если код явно заявляет, что он должен передать на 16 бит int
?