Dans une bibliothèque personnalisée, j'ai vu une implémentation:
inline int is_upper_alpha(char chValue)
{
if (((chValue >= 'A') && (chValue <= 'I')) ||
((chValue >= 'J') && (chValue <= 'R')) ||
((chValue >= 'S') && (chValue <= 'Z')))
return 1;
return 0;
}
Est-ce un Easter Egg ou quels sont les avantages par rapport à la méthode C/C++ standard?
inline int is_upper_alpha(char chValue)
{
return ((chValue >= 'A') && (chValue <= 'Z'));
}
L'auteur de ce code devait probablement prendre en charge EBCDIC à un moment donné, où les valeurs numériques des lettres ne sont pas contiguës (des écarts existent entre I
, J
et R
, S
, comme vous l'avez peut-être deviné).
Il convient de noter que les normes C et C++ garantissent uniquement que les caractères 0
à 9
ont des valeurs numériques contiguës précisément pour cette raison, donc aucune de ces méthodes n'est strictement conforme aux normes.
Il semble qu'il tente de couvrir à la fois EBCDIC et ASCII. Votre méthode alternative ne fonctionne pas pour EBCDIC (elle a des faux positifs, mais pas de faux négatifs)
C et C++ do nécessitent que '0'-'9'
sont contigus.
Notez que les bibliothèques standard appellent do savent si elles fonctionnent sur ASCII, EBCDIC ou d'autres systèmes, elles sont donc plus portables et peut-être plus efficaces.