




                                APNDICE D           
            
                          DIRETIVAS DE COMPILAO  
            
            
                 Uma diretiva  de compilao   um  comentrio  com  uma
            sintaxe especial  que serve  para alterar  a forma  como  um
            programa  compilado. Toda diretiva de compilao inicia com
            um "$" logo aps o delimitador esquerdo do comentrio ("{").
                 Existem 3 tipos de diretivas de compilao:
            
                 (1) Diretivas de mudana (switch directives) - ligam ou
            desligam um  modo de compilao, dependendo da especificao
            de um  "+" ou  um "-"  logo  depois  do  nome  da  diretiva.
            Dividem-se em  diretivas locais (que afetam apenas uma parte
            do  programa)   e  diretivas  globais  (que  afetam  todo  o
            programa). Ex.: {$F+}, {$B-}
            
                 (2) Diretivas  de parmetros  (parameter directives)  -
            especificam parmetros  que alteram  o modo  de  compilao,
            como os  tamanhos de  partes  da  memria  ou  os  nomes  de
            arquivos de incluso. Ex.: {$I TESTE.INC}
            
                 (3) Diretivas  condicionais -  controlam  a  compilao
            condicional de  partes  do  programa  fonte,  dependendo  de
            houverem   ou    no   sido   definidos   certos   smbolos.
            Ex.: {$IFDEF CPU86}
            
            DIRETIVAS DE MUDANA          
            
            {$A+} ou {$A-} (global)
            -------------------------
                 Alinha (+)  ou no  (-) variveis ou constantes tipadas
            em endereos  pares. Aumenta  a velocidade  da execuo  nos
            microprocessadores 8086,  80286, 80386.  No tem  efeito com
            microprocessadores 8088.
                 O modo  "default" (que   usado se no for especificado
            outro modo)  o {$A+}
            
            {$B+} ou {$B-} (local)
            ------------------------
                 Avalia de  forma completa  (+)  ou  incompleta  (-)  as
            expresses booleanas. A avalio incompleta termina quando o
            resultado se torna evidente. O modo "default"  {$B-}.
            
            {$E+} ou {$E-} (global)
            -------------------------
                 Gera (+)  ou no  (-) cdigo  emulador do coprocessador
            aritmtico 8087. O "default"  {$E+}.
            
            {$F+} ou {$F-} (local)
            ------------------------
                 Fora a  utilizao (+)  ou no  (-) do  modelo FAR  de
            memria. O "default"  {$F-}.

                                       - 218 -





            
            {$I+} ou {$I-} (local)
            ------------------------
                 Interrompe (+)  ou no  (-) a  execuo de  um programa
            quando ocorre  um erro  de entrada  ou sada.  O "default" 
            {$I+}. No  confunda  esta  diretiva  com  a  diretiva  para
            incluso de arquivos {$I Arquivo}.
                 Quando   usado um  {$I-}, a  funo IORESULT assume um
            valor diferente de zero quando ocorre erro de entrada/sada.
            
            Exemplo:
            ...
            Assign(arq, 'TEXTO.TEX');
            {$I-}
            Reset(arq); (* Tentativa de abrir o arquivo para leitura *)
            {$I+}
            if (IOResult <> 0) then
            begin
              Writeln('ERRO: O arquivo TEXTO.TEX nao foi encontrado');
              Halt
            end;
            ...
            
            {$N+} ou {$N-} (global)
            -------------------------
                 Gera  (+)  ou  no  (-)  cdigo  para  o  coprocessador
            aritmtico 8087  no clculo com nmeros reais. O "default" 
            {$N-}.
            
            {$R+} ou {$R-} (local)
            ------------------------
                 Verifica (+)  ou no  (-) se  os limites dos ndices em
            strings ou  matrizes  foram  ultrapassados.  O  "default"  
            {$R-}.
            
            {$S+} ou {$S-} (local)
            ------------------------
                 Verifica (+)  ou no (-) se existe espao suficiente na
            pilha (stack)  para execuo  de funo  ou procedimento.  O
            "default"  {$S+}.
            
            {$V+} ou {$V-} (local)
            ------------------------
                 Exige (+)  ou no  (-) correspondncia  exata entre  os
            tamanhos  das   constantes  do  tipo  string  passadas  como
            parmetros a procedimentos ou funes. O "default"  {$V+}.
            
                 Outras diretivas  de mudana  so  {$D+/-},  {$L+/-}  e
            {$O+/-}.
                 Vrias diretivas  podem aparecer  juntas, separadas por
            vrgulas e  sem espao  em branco entre elas. Ex.: {$E+,N+},
            {$A+,B-,F-,R-,V+}.
            
            

                                       - 219 -





            DIRETIVAS DE PARMETROS       
            
            {$I ARQUIVO}
            --------------
                 Inclui  um  arquivo  de  nome  especificado  durante  a
            compilao. O  arquivo  deve  conter  cdigo  fonte  e  pode
            incluir outros  arquivos at  um mximo  de 8  nveis.  Ex.:
            {$I TESTE.INC}
            
            {$L ARQUIVO}
            --------------
                 Incorpora um mdulo de cdigo compilado (extenso .OBJ)
            durante a ligao (linking) do programa. O arquivo .OBJ pode
            ser gerado  por outras linguagens, como Assembly ou Turbo 
            ou ter  sido gerado  pelo  utilitrio  BINOBJ.EXE  do  Turbo
            Pascal. Procedimentos  ou  funes  definidos  dessa  forma,
            precisam ser declaradas como EXTERNAL.
            
            Exemplo:       ...
                           PROCEDURE Teste; external;
            
                           {$L PROC.OBJ}
                 
                           FUNCTION F_teste(x: real): real; external;
            
                           {$L FUNCOES.OBJ}
                           ...
                 No fragmento  acima, o procedimento Teste est definido
            e compilado  em PROC.OBJ  (possivelmente  gerado  por  outra
            linguagem) e a funo F_teste est definida em FUNCOES.OBJ.
                 O  Pascal  possui  vrios  programas-exemplo  usando  a
            diretiva $L.  Alguns  entre  eles  mostram  como  "misturar"
            programas em  Pascal com funes em C (veja o CPASDEMO.PAS e
            o CPASDEMO.C).
            
            {$M TAM1, TAM2, TAM3}
            -------------------------
                 Especifica o  tamanho de determinadas partes da memria
            (o "heap" e a pilha (stack)).
                 tam1   um inteiro  de 1024  a 65520  e corresponde  ao
            tamanho da pilha em bytes; tam2  o tamanho mnimo do "heap"
            e deve  ser um  inteiro de  0 a  655360; tam3  refere-se  ao
            tamanho mximo  do "heap"  que deve ser um inteiro de tam2 a
            655360. O "default"  {$M 16384, 0, 655360}.
                 O  uso   desta  diretiva   se  torna  indispensvel  em
            programas que  usam muita  recursividade  ou  parmetros  de
            funes ou procedimentos de tamanhos grandes. Nestes casos 
            comum uma  mensagem de erro do tipo "Stack overflow error" e
            devemos aumentar o tamanho da pilha.
            
            COMPILAO CONDICIONAL            COMPILAO CONDICIONAL
            
                 A compilao  condicional   baseada  na  avaliao  de
            determinados smbolos  condicionais.  Smbolos  condicionais

                                       - 220 -





            so   definidos    ou   indefinidos    com   as    diretivas
            {$DEFINE  smbolo}   e  {$UNDEF   smbolo}  respectivamente.
            Smbolos condicionais  parecem com variveis booleanas: eles
            so verdadeiros  se estiverem  definidos e  falsos  em  caso
            contrrio. $DEFINE  ajusta um  smbolo para  "true" e $UNDEF
            ajusta em "false".
                 As diretivas {$IFDEF smbolo}, {$ELSE} e {$ENDIF} fazem
            para a  compilao do  programa fonte,  o mesmo  papel que o
            IF-THEN-ELSE faz para a execuo.
            
            Exemplo:
                                ...
                                {$UNDEF teste}
                                {$IFDEF teste}
                                  (*** trecho 1 ***)
                                {$ELSE}
                                  (*** trecho 2 ***)
                                {$ENDIF}
                                ...
                 No  fragmento  acima,  o  smbolo  teste    indefinido
            ("false"); logo  ser compilado  apenas o  trecho 2 que est
            delimitado pelo {$ELSE} e o {$ENDIF}. Se tivssemos no lugar
            do $UNDEF um {$DEFINE teste}, ento seria compilado apenas o
            trecho 1.
            
                 O  Pascal   tem  alguns   smbolos  pr-definidos  para
            compilao condicional:
                 VER50 ---> Indica que a verso usada  a verso 5.0
                 MSDOS ---> Indica que o sistema operacional  o MS-DOS
                            ou o PC-DOS
                 CPU86 ---> Indica que a CPU  da famlia 8086
                 CPU87 ---> Indica a presena do coprocessador 8087
            
            Exemplo:  {$IFDEF CPU87}  {$N+}  {$ELSE}  {$N-}  {$ENDIF}
                 Neste  exemplo,   se  o   coprocessador  8087   estiver
            presente, a  diretiva $N  ser ligada;  caso contrrio, ser
            desligada.
            
                 As diretivas  de compilao condicional permitem que um
            mesmo programa  fonte seja compilado de vrias maneiras, uma
            para cada tipo de computador.
            
                 Todas   as    diretivas   de   compilao   podem   ser
            ligadas/desligadas atravs da opo Options/Compiler do menu
            principal. Por  exemplo, digite Alt-O, C (de "Compiler") e B
            (de  "Boolean")   para  alterar   o  modo  de  avaliao  de
            expresses booleanas.  Assim, Alt-O  C B  tem o mesmo efeito
            que {$B+}  ou {$B-}.  No entanto,  as diretivas  escritas no
            programa fonte  prevalecem sobre  os ajustes  feitos no menu
            principal.
            
            
            
            

                                       - 221 -
