Files
harbour-core/harbour/doc/es/compiler.txt
2003-07-13 14:51:56 +00:00

343 lines
14 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* $Id$
*/
/*
* Las siguientes partes son derechos adquiridos de sus autores individuales.
* www - http://www.harbour-project.org
*
* Copyright 2000 Alejandro de G rate <alex_degarate@hotmail.com>
* Documentaci¢n en Espa¤ol de: Opciones del Compilador
*
* Vea doc/license.txt por los trminos de la licencia.
*
*/
/* $DOC$
* $FUNCNAME$
* Opciones Compilador
* $CATEGORY$
* Documento
* $ONELINER$
* Opciones del Compilador
* $DESCRIPTION$
*
* <b>Invocando al compilador Harbour: </b>
* ===============================
*
* harbour <archivo[.prg]> [opciones]
* o
* harbour [opciones] <archivo[.prg]>
* o
* harbour [opciones] <archivo[.prg]> [opciones]
*
*
* Las opciones de la l¡nea de comandos debe ser separada, al menos por
* un espacio en blanco.
* Las opciones pueden comenzar con el car cter '/' ¢ '-',
*
*
* <b>Opciones de la l¡nea de comandos de: </b>
* ====================================
*
* /a Declaraci¢n Autom tica de memvar
* ----------------
* Esto causa que todas las variables declaradas por las sentencias
* PARAMETER, PRIVATE ¢ PUBLIC sean autom ticamente declaradas como
* variables MEMVAR.
*
* /b Informaci¢n de depuraci¢n (Bug)
* ----------------
* El compilador genera toda la informaci¢n requerida para
* depuraci¢n
*
* /d<id>[=<val>] #define <id>
* ----------------
*
* /es[<nivel>] Establece la Severidad de la salida (Exit Severity)
* ----------------
*
* /es or /es0 - Todas las advertencias son ignoradas y el c¢digo
* de salida retornado por el compilador (accedido por
* el comando de DOS ERRORLEVEL) es igual a cero si
* no hay errores en el archivo fuente compilado.
* /es1 - Cualquier advertencia genera un c¢digo de salida
* distinto de cero, pero la salida es aún creada.
* /es2 - Cualquier advertencia es tratada como error y
* ningún archivo de salida es creado. El c¢digo de
* salida es establecido a un valor distinto de cero.
*
* /g<tipo> Generaci¢n del tipo de archivo de salida <type>
* ----------------
*
* /gc tipo de salida: fuente de lenguaje C (.c) (defecto)
* /gf tipo de salida: Windows/DOS OBJ32 (.obj)
* /gh tipo de salida: Objeto Portable de Harbour (.hrb)
* /gj tipo de salida: fuente de Java (.java)
* /gp tipo de salida: fuente de Pascal (.pas)
* /gr tipo de salida: recursos de Windows (.rc)
*
* /i<ruta> Agrega la ruta de búsqueda de archivos #Include
* ----------------
*
* /l Suprime la informaci¢n del número de L¡nea
* ----------------
* El compilador no genera el número de l¡nea del c¢digo fuente
* en el archivo de salida. La funci¢n PROCLINE() retornar  cero
* para los m¢dulos compilados usando esta opci¢n.
*
* /m Compilar el M¢dulo actual solamente
* ----------------
*
* /n Sin procedimiento de inicio impl¡cito
* ----------------
* El compilador no crea un procedimiento con el mismo nombre
* que el del archivo compilado. Esto significa que algunas
* declaraciones puestas antes de la primera sentencia de
* PROCEDURE ¢ FUNCTION tienen el alcance del archivo y pueden ser
* accedidas/usadas en todas las funciones/procedimientos definidos
* en el archivo fuente compilado. Todas las sentencias ejecutables
* puestas al principio del archivo y antes de la primera sentencia
* de PROCEDURE ¢ FUNCTION son ignoradas.
*
* /o<ruta> Unidad de disco y/o ruta para el archivo de salida
* ----------------
*
* /p Genera un archivo de salida Pre-procesada (.ppo)
* ----------------
* El compilador solamente crea el archivo que contiene el
* resultado del archivo fuente pre-procesado.
*
* /q Quieto
* ----------------
* El compilador no imprime ningún mensaje durante la compilaci¢n
* (excepto la informaci¢n del copyright).
*
* /q0 que permanezca realmente Quieto y no muestre ni
* siquiera la informaci¢n del copyright.
*
* /r[<libreria>] Solicita al linker Revisar por la <libreria> (¢
* ---------------- ninguna)
* Actualmente no soportado en Harbour.
*
* /s Solo chequeo de Sintaxis.
* ----------------
* El compilador chequea la sintaxis solamente. Ningún archivo de
* salida es generado.
*
* /t<ruta> Ruta para la creaci¢n de un archivo Temporario
* ----------------
* Actualmente no usado en harbour (El compilador de harbour no
* crea ningún archivo temporal)
*
* /u[<archivo>] Usar la definici¢n de comando establecido en el
* <archivo> (¢ ninguno)
* ----------------
* Aún no soportado.
*
* /v Las Variables son asumidas como M->
* ----------------
* Todas las variables sin declarar ¢ unaliased son asumidas como
* variables MEMVAR (variables privadas ¢ públicas). si este switch
* no es usado entones el alcance de estas variables es chequeado
* en tiempo de ejecuci¢n.
*
* /w[<nivel>] Establece el número de nivel de las advertencias
* ---------------- (Warnings) (0..4, por defecto es 1)
*
* /w0 - sin advertencias
* /w or /w1 - advertencias compatibles con Clipper
* /w2 - algunas advertencias útiles ausentes en Clipper
* /w3 - advertencias generadas para extensiones al lenguaje
* hechas en Harbour. Tambin habilita el chequeo de
* sintaxis fuertemente tipeada pero s¢lo advierte
* contra los tipos declarados, o los tipos que pueden
* ser calculados en tiempo de compilaci¢n.
* /w4 - habilita advertencias acerca de operaciones que son
* sospechosas, lo cual significa que si se mezclan
* tipos sin declarar ¢ tipos que no pueden ser
* calculados en tiempo de compilaci¢n, junto con los
* tipos ya declarados, una advertencia ser  generada.
*
* /x[<prefijo>] Establece el s¡mbolo del prefijo agregado al nombre
* de funci¢n (para archivo.c solamente)
* ----------------
* Establece el s¡mbolo del prefijo agregado al nombre de funci¢n
* de inicio (en la salida de lenguaje C, actualmente).
* Esta funci¢n es generada autom ticamente para cada m¢dulo de PRG
* compilado.
* Este prefijo adicional puede ser usado para suprimir problemas
* con s¡mbolos duplicados durante el enlazado de una aplicaci¢n
* (linking) con alguna librer¡a de terceros.
*
* /y Seguimiento de la actividad de Lex & Yacc
* ----------------
* El compilador Harbour usa las utilidades FLEX y YACC para
* analizar el c¢digo fuente y generar el archivo de salida
* requerido.
* Esta opci¢n sigue la actividad de esas utilidades.
*
* /z Suprime el cortocircuito l¢gico (.AND. y .OR.)
* ----------------
*
* /10 restringe la longitud de s¡mbolos a 10 caracteres.
* ----------------
* Todos los nombres de variables y de funciones son truncados a
* un m ximo de 10 caracteres.
*
*
* <b>Compilaci¢n en modo lote (batch). </b>
* ================================
*
* @<archivo> Compila la lista de m¢dulos en el <archivo>
* -----------------
* No soportado aún.
*
*
*
* Conocidas incompatibilidades entre compiladores harbour y clipper
* =================================================================
*
* NOTA:
* Si desea librer¡as de compilaci¢n y ejecuci¢n 100 % compatibles,
* entonces Ud. debe definir: HARBOUR_STRICT_CLIPPER_COMPATIBILITY.
* Esta opci¢n debe ser definida en el archvivo ../include/hbsetup.h
* (en efecto esta opci¢n es puesta en un comentario por defecto - Ud.
* necesita remover los caracteres /* */ solamente. Este cambio debe
* ser realizado antes de invocar la utilidad make.
*
*
* Manejo de variables sin declarar
* --------------------------------
* Cuando un valor es asignado a una variable no declarada y la opci¢n
* -v de la l¡nea de comandos no es usada, entonces el compilador
* Clipper asume que la variable es una variable PRIVATE ¢ PUBLIC y
* genera un opcode POPM (pop memvar).
*
* Cuando el valor de una variable no declarada es accedido y la opci¢n
* -v de la l¡nea de comandos no es usada, el compilador Harbour genera
* un opcode PUSHV (push variable) para determinar el tipo de variable
* en tiempo de ejecuci¢n
* Si un campo con el nombre requerido existe en el area de trabajo
* actual, entonces este valor es usado. Si no existe el campo, entonces
* una variable PRIVATE ¢ PUBLIC es usada (si existe).
*
* El compilador Harbour genera un opcode para determinar el tipo de
* variable en tiempo de ejecuci¢n (POPVARIABLE or PUSHVARIABLE) en
* ambos casos (asignaci¢n y acceso).
*
* La diferencia puede ser chequeada por el siguiente c¢digo:
* <fixed>
* PROCEDURE MAIN()
* PRIVATE myname
*
* DBCREATE( "TEST", { { "MYNAME", "C", 10, 0} } )
* USE test NEW
* SELECT test
* APPEND BLANK
*
* FIELD->myname := "FIELD"
* MEMVAR->myname := "MEMVAR"
*
* myname := myname + " assigned"
*
* // In Clipper: "FIELD", In Harbour: "FIELD assigned"
* ? FIELD->myname
*
* // In Clipper: "MEMVAR assigned", In Harbour: "MEMVAR"
* ? MEMVAR->myname
*
* USE
*
* RETURN
* </fixed>
*
*
* Pasando por referencia una variable no declarada
* -------------------------------------------------
* El compilador Harbour usa un opcode especial PUSHP para pasar una
* referencia a una variable no declarada ( el operador '@' ). El tipo
* de la variable pasada es chequeada en tiempo de ejecuci¢n (field or
* memvar). Sin embargo las variables de campo no pueden ser pasadas
* por referencia. Esto significa que Clipper chequea s¢lo la variable
* memvar y no mira por una de campo.
* Esta es la raz¢n por la cual el compilador Harbour usa el opcode
* habitual PUSHMEMVARREF en estos casos. N¢tese que el comportamiento
* en tiempo de ejecuci¢n es el mismo en Clipper y en Harbour - s¢lo
* los opcodes generados son diferentes.
*
*
* Manejo de mensajes a objetos
* ----------------------------
*
* El seteo de HARBOUR_STRICT_CLIPPER_COMPATIBILITY determina
* la forma en que el env¡o encadenado de mensajes es manejado
*
* Por ejemplo, el siguiente c¢digo:
*
* a:b( COUNT() ):c += 1
*
* ser  manejado como:
*
* a:b( COUNT() ):c := a:b( COUNT() ):c + 1
* en modo de compatibilidad estricta y
*
* temp := a:b( COUNT() ), temp:c += 1
* en modo no-estricto.
*
* En la pr ctica, Clipper llamar  a la funci¢n COUNT() dos veces:
* La primera vez antes de la adici¢n y la segunda despus de la
* adici¢n.
* En Harbour, COUNT() ser  llamada s¢lo una vez, antes de la adici¢n.
*
* El mtodo Harbour (no-estricto) es:
* 1) M s r pido
* 2) Garantiza que la misma variable de instancia del mismo
* objeto ser  cambiada.
*
* (Ver tambin: ../source/compiler/expropt.c)
*
*
* Inicializaci¢n de variables est ticas
* -------------------------------------
*
* Hay una diferencia en la inicializaci¢n de las variables est ticas
* que son inicializadas con un bloque de c¢digo que refiere a una
* variable local. Por ejemplo:
* <fixed>
* PROCEDURE TEST()
*
* LOCAL MyLocalVar
* STATIC MyStaticVar := {|| MyLocalVar }
*
* MyLocalVar :=0
* ? EVAL( MyStaticVar )
*
* RETURN
* </fixed>
* El c¢digo de arriba compila bien en Clipper, pero ste genera un
* error de ejecuci¢n:
* Error/BASE 1132 Bound error: array access
* Called from (b)STATICS$(0)
*
* En Harbour este c¢digo genera un error en tiempo de compilaci¢n:
* Error E0009 Illegal variable (b) initializer: 'MyLocalVar'
*
* Ambos Clipper y Harbour estan manejando todas las variables locales
* usadas en una forma especial: ellas son separadas de la pila (stack)
* local de la funci¢n / procedimiento donde ellas son declaradas.
* Esto permite acceder a estas variables despues de la salida de una
* funci¢n / procedimiento. Sin embargo todas las variables est ticas
* son inicializadas en un procedimiento separado ('STATICS$' en
* Clipper y '(_INITSTATICS)' en Harbour) antes del procedimiento
* principal y antes de todos los procedimientos INIT. Las variables
* locales no existen en la pila de evaluaci¢n (eval stack) donde las
* variables est ticas son inicializadas, as¡ ellas no pueden ser
* separadas.
*
* $END$
*/