Академический Документы
Профессиональный Документы
Культура Документы
A imensa coleção de funções que o sistema operacional do Windows nos oferece, a assim
chamada API (Application Programming Interface), facilita muito nossa programação se
soubermos exatamente como usar cada função. Ler a descrição técnica é essencial para
saber, entre outras coisas, o número de parâmetros exigidos, o tipo destes parâmetros e o
valor de retorno da função. Afinal de contas, como programadores, o mínimo a fazer é se
familiarizar com a interface que nos é oferecida.
As bibliotecas padrão
Para inserir funções da API nos nossos programas é preciso indicar ao pre-processador onde
ele poderá encontrá-las. Sabemos que funções da API do Windows ficam agrupadas em
arquivos próprios de acordo com o tipo, numa espécie de biblioteca de funções. Estas
bibliotecas são aquivos que possuem a extensão .dll, chamados simplesmente de DLLs.
Quando queremos usar uma função da API, ou uma função própria da linguagem C, não
escrevemos a função no nosso programa. É muito mais prático pedir ao pre-processador que
inclua o código da função desejada. Para isto, precisamos fornecer ao pre-processador um
"mapa da mina", para que ele possa localizar e incluir a função desejada. O lcc-win32 possui
vários "mapas" prontinhos para serem utilizados, arquivos com a extensão .h chamados de
cabeçalhos e que se encontram no diretório /lcc/include. Os principais são:
Cabeçalho Uso
stdio.h
math.h
Funções Matemáticas: sin, cos, atan, log, exp, etc. Aqui encontramos trigonometria (sin, cos, tan, atan,
stdlib.h
Standard library functions (funções da biblioteca padrão): Contém abort (término anormal do programa),
stddef.h
Este arquivo define macros e tipos de uso geral em programas: NULL, offsetof, ptrdiff_t, size_t e muitos
1/5
Linguagem C - Bibliotecas e Tipos
string.h
Manipulação de strings: aqui são definidas todas as funções que lidam com a representação padrão de
windows.h
Todas as definições de janelas: criar, abrir, etc. É um arquivo cabeçalho grande com cerca de 500 mega
Se você tiver curiosidade de saber como são montados estes arquivos de cabeçalho, basta
abrí-los em qualquer editor de texto (o do lcc-win32 também serve).
Os tipos padrão
Manifestos e definições
2/5
Linguagem C - Bibliotecas e Tipos
Com este manifesto apresentamos o identificador sqrt ao compilador, dizendo que se trata de
uma função que usa um argumento de precisão dupla (double) e que retorna um resultado de
precisão dupla (double). A apresentação pára por aí e nem ocupa espaço. É que, se esta
função não for utilizada pelo programa, ela nem será incorporada - portanto, não ocupará
espaço no executável.
Uma declaração (definição) diz ao compilador para alocar espaço para o identificador. Por
exemplo, para definir a variável "contador":
int contador;
Neste caso, o compilador cria um espaço na área de variáveis locais da função que contenha
esta definição, abrindo espaço suficiente para conter um número inteiro.
O que precisa ficar bem claro é que uma variável pode ser manifestada quantas vezes
quisermos, mas só deve ser definida num único ponto. É o mesmo que dizer que, quando
definimos uma variável, emitimos sua "carteira de identidade" (que precisa ser única) e fixamos
sua residência (para que possamos encontrá-la quando for preciso). Quando manifestamos
uma variável (ou uma função), dizemos apenas que deve aparecer uma "moça" de nome tal,
ou um "rapaz" de nome tal, ou um int ou um double de nome tal... enfim, uma entidade de
nome tal cujo tipo seja o que foi manifestado - mas que ainda está sem lenço e sem
documento.
Uma variável é definida com . Se quisermos apenas manifestar a variável, sem alocar espaço
para ela, adicionamos a palavra-chave extern. Além disto, é possível definir uma variável e,
simultaneamente, atribuir-lhe um valor. Veja alguns exemplos:
Ponteiros (que apontam para endereços) são manifestados ou definidos com asterisco.
3/5
Linguagem C - Bibliotecas e Tipos
Para economizar digitação podemos colocar variáveis do mesmo tipo, separadas por vírgulas,
numa única linha. Apenas para manter a ordem, é aconselhável não misturar ponteiros com
outros inteiros:
Mas porque manifestar funções? Não seria mais rápido e prático defini-las diretamente e
usá-las? Aí depende... veja o código abaixo:
Agora imagine que, para se garantir, você tenha que escrever os protótipos de todas as
funções da linguagem C e da API do Windows que forem usadas pelo seu programa. Uma
loucura! É aí que entram os arquivos cabeçalho, aqueles com a extensão .h e que se
encontram no diretório /lcc/include/. Estes arquivos nada mais são do que coleções de
protótipos. Basta incluir os cabeçalhos necessários com #include e ganhamos um monte de
tempo. Graaaaande Jacob Navia, autor do lcc-win32, que forneceu o pacote completo!
4/5
Linguagem C - Bibliotecas e Tipos
Definindo funções
Definir funções tem o mesmo jeitão do manifesto de funções. Uma das diferenças é que, ao
invés de usar ponto e vírgula, adicionamos um bloco de outras declarações delimitadas por
colchetes. A outra diferença é que os argumentos precisam receber um nome (ou identificador).
Estes identificadores são imprescindíveis porque apenas através deles é que poderemos
acessar os argumentos. Um exemplo bem simples seria:
Eu sei, este módulo foi um pouco sem graça porque não teve nenhum exemplo para brincar.
Acontece que determinados conceitos são fundamentais se quisermos avançar com alguma
segurança. Para compensar a falta de "brinquedinhos", os próximos módulos vão fazer a festa
da garotada (e da adultada também :wink: )
Mas nem tudo foi pedreira. Se você entendeu o que é (e para que serve) um protótipo de
função, então a linha numerada com 4/5, que consta do nosso programa dlg2.c, deixou de ser
uma incógnita:
... #include "testedlgres.h" static BOOL CALLBACK DialogFunc( HWND hwndDlg, UINT
msg, WPARAM wParam, LPARAM lParam); static char balaio[1024]; ...
Para compensar a falta de exemplos neste tutorial, o próximo é sobre uma "janela de verdade".
Não se preocupe com os detalhes porque, à medida que for necessário, explicações mais
detalhadas serão dadas. Prometo :vovo:
5/5