Primeiro programa
Escreva, compile e rode um programa; veja como são as mensagens do compilador.
O que você precisa#
Do fc.exe e da pasta rtl ao lado dele (a RTL, escrita em Fenner). Não há mais nada a instalar: o LLVM e o ligador vêm dentro do próprio fc.exe. Sem nenhum arquivo de configuração, o fc procura a RTL em ..\rtl, relativa à pasta dele, e os módulos do seu programa ao lado do .fxp.
Escreva#
Crie hello.fxp:
program Hello;
begin
WriteLn('Olá, mundo!');
end.Olá, mundo!Compile e rode#
fc hello.fxpO fc grava o executável ao lado do fonte e diz onde:
Executável gerado: Hello.exeO nome do executável sai do program do fonte (program Hello; gera Hello.exe), não do nome do arquivo. Para escolher o nome, use -o:
fc hello.fxp -o ola.exeUm programa com um pouco mais#
program Fib;
function Fib(N: Int32): Int32;
begin
if N < 2 then
Result := N
else
Result := Fib(N - 1) + Fib(N - 2);
end function;
var
I: Int32;
begin
for I := 0 to 10 do
WriteLn('Fib(', I, ') = ', Fib(I));
end.Fib(0) = 0
Fib(1) = 1
Fib(2) = 1
Fib(3) = 2
Fib(4) = 3
Fib(5) = 5
Fib(6) = 8
Fib(7) = 13
Fib(8) = 21
Fib(9) = 34
Fib(10) = 55Dois detalhes que já aparecem aqui:
Resulté a variável de retorno da função, eExit(valor)sai devolvendo um valor (como emExit(A + B)).- Os fechos podem ser qualificados:
end function;,end procedure;,end class;. São opcionais e ajudam a ler blocos longos, porque o compilador confere se o fecho combina com a abertura.
O compilador ensina#
As mensagens de erro têm o formato arquivo(linha,coluna): Erro: texto e, quando o erro é um nome que existia no Delphi, apontam o nome novo. Alguns exemplos reais:
p.fxp(2,15): Erro: tipo desconhecido ou não suportado: "Integer"Não existe Integer: os tipos dizem a largura. Use Int32.
T2.fxp(10,11): Erro: "IntToStr" nao existe: diga QUAL cadeia voce quer -- "IntToLStr" (bytes),
"IntToUStr" (UTF-16) ou "IntToU8Str" (UTF-8). Para inteiro sem sinal, a familia "UIntTo...Str"Como há quatro cadeias, a conversão diz qual você quer. A família ...ToUStr é a do dia a dia.
p.fxp(2,1): Erro: esperado 'begin', mas encontrado identificador "Begin"A linguagem diferencia maiúsculas. Begin é um identificador qualquer, não a palavra reservada.
p.fxp(5,8): Erro: identificador não declarado: "Red"Um enumerado exige o escopo: TColor.Red, não Red (veja Tipos).
Além de Erro, o compilador emite Aviso e Dica. Os três têm a mesma forma, e a extensão do VS Code os separa por severidade no painel de Problemas.
Opções que você vai usar#
| Opção | Efeito |
|---|---|
-o <arquivo> | nome do executável de saída |
-O0 … -O3 | nível de otimização (padrão -O3) |
-g | informação de depuração (grava um .pdb) |
-D<símbolo> | define um símbolo de compilação condicional |
-PMSWin64 / -PMSWin32 / -PLinux64 | plataforma de destino |
-M<modo> | modo de compilação (-MDebug, -MRelease…) |
A lista completa está em Linha de comando; o que não é plataforma nem modo mora num arquivo de configuração.
Próximos passos#
- Projetos e arquivos: como um programa cresce para vários módulos.
- Léxico: comentários, números, cadeias e palavras reservadas.
- Tipos: a família de tipos numéricos e as quatro cadeias.