В пользовательской библиотеке я увидел реализацию:
inline int is_upper_alpha(char chValue)
{
if (((chValue >= 'A') && (chValue <= 'I')) ||
((chValue >= 'J') && (chValue <= 'R')) ||
((chValue >= 'S') && (chValue <= 'Z')))
return 1;
return 0;
}
Это пасхальное яйцо или каковы преимущества по сравнению со стандартным методом C / C ++?
inline int is_upper_alpha(char chValue)
{
return ((chValue >= 'A') && (chValue <= 'Z'));
}
Автор этого кода предположительно должен был поддержать EBCDIC в некоторый момент, когда числовые значения букв не являются смежными (между I
, J
а также R
, S
как вы уже догадались).
Стоит отметить, что стандарты C и C ++ гарантируют только то, что символы 0
в 9
именно по этой причине имеют непрерывные числовые значения, поэтому ни один из этих методов не соответствует стандартам.
Похоже, он пытается охватить как EBCDIC, так и ASCII. Ваш альтернативный метод не работает для EBCDIC (у него есть ложные срабатывания, но нет ложных отрицаний)
C и C ++ делать требовать, чтобы '0'-'9'
являются смежными.
Обратите внимание, что стандартные вызовы библиотеки делать знать, работают ли они в ASCII, EBCDIC или других системах, чтобы они были более переносимыми и, возможно, более эффективными.