Página 1 de 1

compilacion

Publicado: Vie Jul 14, 2006 2:03 am
por Rene Flores
Ramón:
Acuerdate que existen 2 tipos de errores, cuando estas programando en
cualquier lenguaje, errores de SINTAXIS y errores de TIEMPO DE EJECUCION.
En este caso, por su puesto que el compilador no marca ningun error,
porque la linea es sintacticamente correcta, es decir, no hay "faltas de
ortografia" en la forma en que escribiste, por eso esa linea compila
perfectamente, sigue las reglas del lenguaje para hacer una asignacion,
utiliza los operadores correctos y por lo tanto NO HAY ERROR DE SINTAXIS
Pero si puede haber errores en tiempo de ejecucion ....aaaahhh,.... eso
es otra cosa porque puede ser que alguna de las variables que estas
usando NO ESTA DEFINIDA, NO TIENE UN VALOR COMPATIBLE o ESTA
INICIALIZADA A NIL, pero esto, el compilador no tiene forma de saberlo,
porque el valor que toman las varialbes se resuelve en tiempo de ejecucion.
Por ejemplo, el compilador no sabe que tipo de varible es cNombre, ni si
la haz definido como LOCAL, PRIVATE u otro tipo, tampoco sabe cuando le
vas a dar valor, ni que valor tiene. Vamos a analizar por partes:
Caso 1: cNombre no existe, te lo sacaste de la manga, el compilador no
tiene forma de saberlo porque en (x)Harbour al igual que en Clipper no
necesitas definir una variable previamente, por lo tanto si intentas
sumar cNombre y cNombre no existe, obviamente esa linea causa error.
Caso 2: haces un LOCAL cNombre, pero no le das ningun valor, el
compilador sabe que existe cNombre y en tiempo de ejecucion, como no
tiene ningun valor, se le da el valor de NIL, cuando tu intentas sumar
NIL a cualquier cosa, obviamente esto causa error.
Caso 3: Digamos que se te fueron las cabras al monte y en alguna parte
de tu programa hiciste cNombre := 500 y asi lo dejaste, esto es un valor
numerico que al momento de sumarse a cadenas de caracteres obviamente falla.
Entonces acuerdate, no necesariamente un error de tiempo de ejecucion
tiene que ver con que tan bien, o que tan mal escribiste el codigo fuente.
Saludos
Rene Flores
http://www.ciber-tec.com
Zea escribió:
> Tuve una linea que durante la compilacion no me marco error, pero ya en
> tiempo de ejecucion si, y el compilador no lo detecto.
>
> cCliente := cNombre + ;
> + cApellPaterno + cApellMaterno
>
> el ejemplo es hipotetico, pero asi sucede y el compilador no marca el error.
>
> Saludos.

compilacion

Publicado: Vie Jul 14, 2006 5:28 am
por Rene Flores
Ramón:
++ es un operador valido de Harbour
Saludos
Rene Flores
http://www.ciber-tec.com
Zea escribió:
> Solo me referi a la sintaxis que debia haber marcado error al ser compilada,
> el valor de las variables es normal, ya que no se puede hacer esto:
>
> x := y + + z
>
> mas el compilador de harbour no lo marca como error, y pues , obvio en
> ejecucion ya lo detecta, pero, por que elimina todo lo que encuentra apartie
> del seguno simpbolo +.
>
> Saludos.
>

compilacion

Publicado: Vie Jul 14, 2006 7:49 am
por zeasoftware
Solo me referi a la sintaxis que debia haber marcado error al ser compilada,
el valor de las variables es normal, ya que no se puede hacer esto:
x := y + + z
mas el compilador de harbour no lo marca como error, y pues , obvio en
ejecucion ya lo detecta, pero, por que elimina todo lo que encuentra apartie
del seguno simpbolo +.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/

compilacion

Publicado: Vie Jul 14, 2006 9:25 am
por jose.luis
Ramón,
> Tuve una linea que durante la compilacion no me marco error, pero ya en
> tiempo de ejecucion si, y el compilador no lo detecto.
>
> cCliente := cNombre + ;
> + cApellPaterno + cApellMaterno
>
¿No te apareció ningún 'warning'? Algo así:
tCargaRapi.prg(26) Warning W0001 Ambiguous reference: 'B'
tCargaRapi.prg(26) Warning W0001 Ambiguous reference: 'A'
Normalmente, si aparecen esos avisos es por que alguna variable no la has
declarado previamente y muy probablemente no esté inicializada. Estos avisos
no aparecen con datas de clases.
Saludos,
José Luis Capel

compilacion

Publicado: Vie Jul 14, 2006 10:37 am
por zeasoftware
i++ es un incremento
i + + al tener un espacio no debe ser operador
x = 7 + ;
+ 5 //es un error de sintaxis.
Pero aun asi los deja pasar, no generan mas que un error de ejecucion, pero,
debe detectarlos el compilador de sintaxis o de lexico.
Saludos.
--
Ramón Zea
ramonzea@yahoo.com
http://www.paginasprodigy.com/zeasoft/

compilacion

Publicado: Vie Jul 14, 2006 12:35 pm
por zeasoftware
> Normalmente, si aparecen esos avisos es por que alguna variable no la has
> declarado previamente y muy probablemente no esté inicializada. Estos avisos
> no aparecen con datas de clases.
>
>
> Saludos,
> José Luis Capel
>
Esa puede ser la razon, ya que si lees el ejemplo lo invente para mostrarlo, pero, si estoy usando datas.
Gracias.
Ramón Zea
--

compilacion

Publicado: Vie Jul 14, 2006 6:10 pm
por Rene Flores
Ramón:
Puedes hacer ++i o i++, preincremento y postincremnto
Saludos
Rene Flores
http://www.ciber-tec.com
Zea escribió:
> i++ es un incremento
>
> i + + al tener un espacio no debe ser operador
>
> x = 7 + ;
> + 5 //es un error de sintaxis.
>
> Pero aun asi los deja pasar, no generan mas que un error de ejecucion, pero,
> debe detectarlos el compilador de sintaxis o de lexico.
>
> Saludos.