A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Tutoriais e Programação

Linguagem C - Bibliotecas e Tipos

Qui

27

Nov

2008


20:23

(38 votos, média 4.21 de 5) 


Manifestando e definindo variáveis

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:

int a; int b = 3; double d = (1024*1024)/16; extern long long h;

No exemplo acima, a variável h, de 64 bits, foi apenas manifestada. As restantes foram (manifestadas e imediatamente) definidas, sendo que a variável a não recebeu qualquer valor, a variável b recebeu o valor 3 e a variável d recebeu o valor de uma operação de multiplicação e divisão.

Ponteiros (que apontam para endereços) são manifestados ou definidos com asterisco. Tomemos a variável b como exemplo: se quisermos o valor de b, referenciamos b pelo "nome" e obtemos o valor 3 (nome é b e seu valor é 3). Mas, se quisermos saber em que endereço de memória foi armazenado o valor de b, usamos *b.

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:

int a, contador, base, c; int *enderecoDaBase, *m, *pontA;

Manifestando funções

O formato padrão do manifesto de funções é (, … );

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:

Módulo A Módulo B int funcTeste(int a) ... { funcTeste(7, 9); return a + 8; ... }

Se criarmos diretamente a função funcTeste no módulo do programa A e, no módulo do programa B, inadvertidamente chamarmos a função com parâmetros que não são os que foram definidos, o compilador não tem como identificar o erro. Vai tudo muito bem até que se resolva executar o programa que, obviamente, vai dar pau. Para que o compilador possa checar todas as chamadas de funções, é preciso manifestá-las antes de defini-las.

Funções apenas manifestadas são chamadas de PROTÓTIPOS de função. No exemplo acima, se funcTeste tivesse um protótipo, o compilador estrilaria quando estivesse checando a chamada no módulo B, avisando que a chamada está incorreta. Apenas uma linha de protótipo pode economizar horas de debug quando tentamos encontrar um erro que só aparece em tempo de execução. Pense nisso!

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!

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:

int SomaUm(int entrada) { return entrada + 1; }

Observações da vó

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

Логофет Вадим Геннадьевичгриль на газу ценалобановский александр женаустановка ssdотзыв написатьvsemsmart broker mfx

Informações adicionais