¿Por qué el alfabeto se divide en múltiples rangos en este código C?
En una biblioteca personalizada vi una implementación:
inline int is_upper_alpha(char chValue)
{
if (((chValue >= 'A') && (chValue <= 'I')) ||
((chValue >= 'J') && (chValue <= 'R')) ||
((chValue >= 'S') && (chValue <= 'Z')))
return 1;
return 0;
}
¿Es eso un Huevo de Pascua o cuáles son las ventajas frente al método estándar de C/C++?
inline int is_upper_alpha(char chValue)
{
return ((chValue >= 'A') && (chValue <= 'Z'));
}
2 answers
El autor de este código presumiblemente tuvo que soportar EBCDIC en algún momento, donde los valores numéricos de las letras no son contiguos (existen brechas entre I
, J
y R
, S
, como habrás adivinado).
Vale la pena señalar que los estándares C y C++ solo garantizan que los caracteres 0
a 9
tienen valores numéricos contiguos precisamente por esta razón, por lo que ninguno de estos métodos se ajusta estrictamente al estándar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-05 10:14:58
Parece que intenta cubrir tanto EBCDIC como ASCII. Su método alternativo no funciona para EBCDIC (tiene falsos positivos, pero no falsos negativos)
C and C++ do require that '0'-'9'
are contiguous.
Tenga en cuenta que las llamadas a la biblioteca estándar saben si se ejecutan en ASCII, EBCDIC u otros sistemas, por lo que son más portátiles y posiblemente más eficientes.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-05 10:08:46