domingo, noviembre 29, 2009

Harbour VS xHarbour, Las diferencias verdaderas (Parte 14)

Uso de un string de 1 caracter como valor numérico.

xHarbour usa strings de 1 byte como valor numérico correspondiente al valor ASCII de dicho byte, por ejemplo:

? "A" * 10 // 650

Por default el núcleo de Harbour no soporta esta funcionalidad, sin embargo tiene un API de POO suficientemente robusto para soportar la implementación de esta funcionalidad sin tocar el código del núcleo aún a nivel .PRG. Esta característica está implementada en XHB.LIB.

El siguiente código se compila y se ejecuta correctamente en ambos compiladores:
      #ifndef __XHARBOUR__
#include "xhb.ch"
#endif
proc main()
local c := "A"
? c * 10, c - 10, c + 10, c * " ", chr( 2 ) ^ "!"
return
y en ambos casos da el mismo resultado.

De cualquier manera la emulación no está completa en Harbour, funciona solo a nivel código .PRG.

En xHarbour las funciones/macros estándar del API en "C" fueron modificadas para interpretar un string de un byte como un número. Esto es una fuente potencial de muy serios problemas, por ejemplo OrdSetFocus("1") podría interpretarse como seleccionar el índice 1 o el índice 49. Los programadores de Harbour decidieron no añadir dicha funcionalidad a nivel núcleo, de tal forma que en Harbour, las funciones escritas en "C" no aceptan un string de 1 byte como parámetro numérico y código como este:
      ? str( "0" )
Genera un error en tiempo de ejecución en ver de imprimir ' 48'.

Continuará....

1 comentario:

Anónimo dijo...

Hola Rene

No nos hemos comunicado directamente por pendientes por ambos lados pero tengon una pregunta.

Aparte de ver la diferencia entre xHarbour y Harbour cual es la idea en re-transmitir esta informacion.

Nos estas diciendo entre lineas que quizas xailer ahora compile via Harbour o nos tienes una sorpresa mas chipocluda.

Saludos
Ramiro (Guadalajara)