Я нашел реализацию функции strcmp. Я показал ее другу, и он сказал следующее: «Стоит отметить, что она не всегда возвращает разницу между двумя разными символами; на самом деле разрешено возвращать любое целое число при условии, что знак так же, как разница между байтами». затем не дал мне никаких дополнительных объяснений, код такой
int
strcmp(s1, s2)
register const char *s1, *s2;
{
while (*s1 == *s2++)
if (*s1++ == 0)
return (0);
return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1));
}
Может кто-нибудь объяснить, в чем ошибка? и какая строка может вызвать сбой?
const
(функция стандарта C) в объявлении с использованием достандартной (K&R) нотации определения/объявления функции. - person Jonathan Leffler   schedule 15.03.2015const
, а также разрешил этот стиль объявления функции. Это просто похоже на стиль кодирования, который был популярен в начале 90-х и пытался работать со стандартными и предстандартными компиляторами. - person chux - Reinstate Monica   schedule 15.03.2015const
) к определению старого стиля. - person Jonathan Leffler   schedule 15.03.2015const
, код защищает тело функции от ошибки кодирования, которая изменила*s1
и т. д. Для компиляции до C89const
было бы просто устранено с помощью#define const
. Не такой эксцентричный, но определенно старый стиль. - person chux - Reinstate Monica   schedule 15.03.2015