为什么在这个C代码中字母分成多个范围?

在自定义库中,我看到了一个实现:

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在某些时候,这些字母的数字值是非连续的( IJRS之间存在空隙,正如你可能已经猜到的那样)。

值得注意的是,C和C ++标准仅仅保证字符09具有连续的数值,正是这个原因,所以这两种方法都没有严格的标准符合。

看起来它试图覆盖EBCDIC和ASCII。 您的替代方法不适用于EBCDIC(它有误报,但没有误报)

C和C ++ 确实需要'0'-'9'是连续的。

请注意,标准库调用确实知道它们是以ASCII,EBCDIC还是其他系统运行,因此它们更便携,可能更有效。