/* * $Id$ */ /* * Las siguientes partes son derechos adquiridos de sus autores individuales. * www - http://www.harbour-project.org * * Copyright 2000 Alejandro de G rate * Documentaci¢n en Espa¤ol de: Opciones del Compilador * * Vea doc/license.txt por los t‚rminos de la licencia. * */ /* $DOC$ * $FUNCNAME$ * Opciones Compilador * $CATEGORY$ * Documento * $ONELINER$ * Opciones del Compilador * $DESCRIPTION$ * * Invocando al compilador Harbour: * =============================== * * harbour [opciones] * o * harbour [opciones] * o * harbour [opciones] [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 '/' ¢ '-', * * * Opciones de la l¡nea de comandos de: * ==================================== * * /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[=] #define * ---------------- * * /es[] 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 Generaci¢n del tipo de archivo de salida * ---------------- * * /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 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 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[] Solicita al linker Revisar por la (¢ * ---------------- 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 para la creaci¢n de un archivo Temporario * ---------------- * Actualmente no usado en harbour (El compilador de harbour no * crea ningún archivo temporal) * * /u[] Usar la definici¢n de comando establecido en el * (¢ 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[] 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. Tambi‚n 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[] 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. * * * Compilaci¢n en modo lote (batch). * ================================ * * @ Compila la lista de m¢dulos en el * ----------------- * 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: * * 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 * * * * 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 despu‚s de la * adici¢n. * En Harbour, COUNT() ser  llamada s¢lo una vez, antes de la adici¢n. * * El m‚todo Harbour (no-estricto) es: * 1) M s r pido * 2) Garantiza que la misma variable de instancia del mismo * objeto ser  cambiada. * * (Ver tambi‚n: ../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: * * PROCEDURE TEST() * * LOCAL MyLocalVar * STATIC MyStaticVar := {|| MyLocalVar } * * MyLocalVar :=0 * ? EVAL( MyStaticVar ) * * RETURN * * 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$ */