Project Options

<< Click to Display Table of Contents >>

Navigation:  Novatos >

Project Options

Previous pageReturn to chapter overviewNext page

 

Project -> Options

 

Durante o desenvolvimento utilize estas opções no project options (veja explicação de cada item na próxima página):

 

 

Para versão final do projeto use:

 

 

Para facilitar alternar entre estes dois abra a caixa de Project Options com Alt+F11 e digite ZOFLERD

 

Code Generation

Com um nome vago, já que quase todas as outras opções afetam a geração de código, este grupo contém as opções que não se encaixam em outros grupos.

 

Optimization

É uma opção que você vai querer mexer. Quando ligada, tem os seguintes efeitos:

Gera um código menor e mais rápido.

Torna a compilação mais lenta.

Torna a depuração mais difícil, pois coloca variáveis em registradores, elimina variáveis, troca a ordem de execução do código, elimina loops, etc.

Note que o significado do seu código não muda. É uma boa opção para o código final, mas deve estar desligada durante o desenvolvimento.

 

Aligned record fields

Quando ligada, alinha campos de record em vizinhanças de 32 bits. Gera um código maior e mais rápido. Normalmente é irrelevante, mas deve ser observada se você estiver trocando dados entre executáveis compilados com esta opção em posições diferentes. Por exemplo: DLL ou troca de dados via arquivos (file of …). Recomendamos deixar ligada e esquecer o assunto.

 

Stack Frames

Quando ligada torna o código maior e mais lento. Útil durante a depuração (torna a janela View | Call Stack mais informativa em alguns casos). A não ser em casos especiais, deixe desligada.

 

Pentium-Safe FDIV

Quando ligada, gera código de contas em ponto flutuante mais lento, mas que se defende de um bug existente nos primeiros Pentium que tornam a divisão menos precisa. Recomendamos deixar desligada, visto que: Penaliza os usuários que possuem micros novos. Apenas CPUs antigas são afetadas. Faz diferença em poucas situações (planilhas e CAD, basicamente).

 

Runtime Errors

Quando ligadas, todas estas opções causam a geração de código adicional de verificação de erro, tornando os programas maiores e mais lentos. A princípio, estas opções deveriam ser ligadas apenas durante o desenvolvimento e desligadas no código final, mas a opção "I/O checking" deve estar ligada para o mecanismo de exception funcionar com operações de arquivo.

 

Range Checking

"Range Checking" verifica faixa dos índices de arrays e strings em tempo de execução. Por exemplo, o seguinte erro é detectado:

 

var

 I: integer;

 A: array[1..10] of double;

begin

 I    := 11;

 A[I] := 100;

end;

 

Overflow Checking

Verifica estouro de contas em números inteiros, por exemplo:

 

var

 I: word; // Valor máximo: 32767

begin

 I := 32000;

 I = I * 2;

end;

 

Syntax Checking

A maioria destas opções em a ver com mudanças feitas na linguagem Pascal ao longo da vida do Turbo Pascal/Delphi. As mudanças normalmente foram para melhor, mas para compatibilidade com versões antigas elas podem ser desligadas.

 

Strict Var-Strings e Open Parameters

Estas opções só valem se outra, Huge Strings estiver desligada. Como a VCL exige que Huge Strings esteja ligada, estas opções podem ser consideradas obsoletas. Na prática, só poderemos mexer nelas em programas não-VCL, ou seja, aplicativos em modo console e DLL.

 

Huge Strings

Quando ligada, define string como sendo AnsiString. Quando desligada, string vira ShortString. AnsiString é o formato novo de strings alocadas dinamicamente, que podem ter até 2 GB. ShortString é o formato usado até o Delphi 1.0, que aloca um buffer fixo de 256 bytes. O melhor é deixar esta opção ligada, mas podemos desejar desliga-la nos seguintes casos:

Para compatibilidade com código Turbo Pascal antigo;

Para permitir escrever DLLs que não dependam de SHAREMEM.DLL.

Em ambos os casos, contudo, podemos definir ShortString substituindo string por string[255]. A segunda forma declara uma string no formato antigo, independentemente do ajuste desta opção.

 

Extended Syntax

Esta opção foi introduzida no Turbo Pascal for Windows, basicamente para facilitar a chamada da API do Windows. Ela deve estar ligada sempre. Ela é fornecida apenas para compatibilidade com programas antigos escritos em Turbo Pascal.

Quando ligada, ela permite:

Ignorar o valor de retorno de funções.

Trabalhar com strings terminadas com zero, formato nativo da linguagem C e da API do Windows. Habilita suporte a PChar e arrays of char indexados a partir de zero.

 

Complete Boolean Eval

Quando ligada, esta opção permite que o compilador gere código que não interpreta completamente uma expressão lógica se o seu resultado for conhecido previamente. Por exemplo:

 

if A and B then

 

Considere que A e B são funções. Se o resultado e A for falso, não precisamos chamar B para saber que o resultado da expressão A and B será falso. Por outro lado, B pode ter um efeito colateral interessante, além de seu resultado.

O compilador normalmente deixa esta opção desligada, o que torna o código mais rápido. Podemos considerar que uma função com "efeito colateral" tenha sido mal escrita. Se algum código deva ser sempre executado, ele deve ser colocado em uma procedure à parte e chamado separadamente.

 

Typed @ Operator

Controla o tipo de ponteiro retornado pelo operador @. Se estiver desligado, o ponteiro retornado não tem tipo e é compatível com pointer. Se estiver ligada, a tipagem dos ponteiros é forte. Considere o seguinte exemplo:

 

procedure F;
var
 i: integer;
 f: double;
 O: ^integer;
begin
 O := @i;
 O := @f; // Esta linha só compila se o operador @ não tiver tipo
end;

 

A princípio seria uma boa idéia ligar esta opção, pois o compilador fica mais exigente e pode pegar alguns erros de lógica a mais, como o do código acima. No entanto, a VCL só compila se esta opção estiver desligada. Sugiro que esta opção esteja ligada, mas seja desligada se for necessário recompilar a VCL.

 

Assignable Typed Constants

No Turbo Pascal e no Delphi 1.0, não existe maneira de declarar uma variável inicializada. A seguinte sintaxe foi introduzida apenas no Delphi 2.0:

 

var
 X: integer = 10;

 

No Delphi 1.0, para ter uma variável inicializada, declarávamos uma typed constant:

 

const
 X: integer = 10;

 

X acima pode ser usado como variável, ou seja, aparecer do lado esquerdo de uma expressão:

 

X := 20;

 

Meio estranho para uma "constante"! Você pode querer ligar esta opção para compatibilidade com versões anteriores do Delphi/Turbo Pascal. No entanto, o melhor é deixa-la desligada e usar var ao invés de const.

 

Debugging

Estas três opções devem estar ligadas durante o desenvolvimento, pois facilitam a depuração. Não esqueça de desliga-las, caso você esteja entregando units compiladas (arquivos DCU).

Caso você se esqueça e entregue uma DCU com informação de depuração, as conseqüências são as seguintes:

O tamanho da DCU aumenta.

O seu cliente pode perceber que você não conhece bem o Delphi ou não é muito rigoroso.

Você está ajudando bastante eventuais competidores a descobrir como o seu código funciona. Embora a descompilação automática de uma unit Delphi seja impossível, você está fornecendo informações como nomes de variáveis, tipos, e muitas outras que podem ajudar bastante um processo de "engenharia reversa".

 

Messages

Deixe sempre ligadas. Elas irão avisar a respeito de código que, embora esteja de acordo com a sintaxe da linguagem Pascal, pode conter erros de lógica. Veja algumas das construções detectadas:

Variáveis declaradas e não utilizadas.

Variáveis utilizadas antes de serem inicializadas.

Falta da atribuição ao valor de retorno de uma função.