Subprogramas(funções),escopo de variáveis e bibliotecas em Linguagem C

Diego Nascimento
6 min readDec 22, 2014

--

O que é e como utilizar.

Funções

Funções são aqueles nomes que usamos para realizar alguma ação em nosso código. Por exemplo, quando utilizamos printf(“”) em nosso programa, estávamos utilizando a função printf(“”) para imprimir uma informação do usuário. Podemos, também, criar nossas próprias funções.

A definição de uma função é dada pelo nome dela seguido de parênteses. Logo depois, especificamos dentro de parênteses os parâmetros que a função deve receber.Você só poderá definir uma função antes do main().

subtrai(float num1,float num2){

float resultado = num1-num2;

printf(“%f”,resultado);

return num1-num2;

}

Nesse caso, a função subtrai recebe um parâmetro chamado num1 e um parâmetro chamado num2. Logo, estamos deixando claro que o usuário, quando chamar a função subtrai, deve informar dois parâmetros.

Em seguida, definimos que essa função deve executar uma subtração entre num1 e num2 e imprimir o resultado na tela.

Uma função não é executada assim que definida, mas somente quando é chamada. Para chamar uma função fazemos:

subtrai(10, 4);

Saída do Console:

6

Ou seja, chamamos a função pelo nome que demos a ela e passamos os parâmetros que ela requer. Porém, nem sempre queremos imprimir o resultado da nossa função da tela.

subtrai(num1, num2){

return(num1-num2)

}

Realizar a subtração e imprimir a subtração na tela são duas coisas diferentes. Logo, podemos suprimir o printf e deixar a função realizar o cálculo apenas. Usando return, podemos informar o resultado da função sem precisar imprimi-lo na tela.

A função também pode não ter parâmetros ou ter parâmetros opcionais.

Inclusive, parâmetros podem ser especificados na chamada da função, mesmo quando são obrigatórios. Caso não sejam nomeados, devem seguir a ordem na qual foram definidos.

Escopo de Variáveis

As variáveis em C podem ser declaradas basicamente de 3 maneiras diferentes: dentro de uma função, fora de uma função, e como parâmetro de uma função. Essas 3 maneiras de declaração fazem com que as variáveis sejam chamadas de locais, globais ou parâmetros formais.

Variáveis Globais

As variáveis globais existem durante a execução de todo o programa e podem ser utilizadas por qualquer função. Elas devem ser declaradas fora de qualquer função, inclusive do main(), e no início de um programa.

Variáveis Locais

Uma variável local só pode ser utilizada pela função ou bloco que a declarou. Ela não é reconhecida por outras funções e só pode ser usada dentro do bloco de função onde está declarada. Uma variável local é criada quando a função começa a ser executada e destruída no final da execução dessa função. Além disso, todas as variáveis locais precisam ser declaradas no início da função.

Parâmetros Formais

Os parâmetros formais são variáveis locais de uma função que são inicializadas no momento da chamada da função. Eles também só existem dentro da função onde foram declarados. Embora sejam utilizadas como inicialização da função, elas podem ser utilizadas normalmente como uma variável local dentro do bloco de função onde estão.

int funcao(int x, int y) {
int i, j;
/* x,y,i e j visíveis apenas dentro da função */

}
main(){

x + i + j; /* erro: x,i e j não definidos */

}

O que são bibliotecas?

são conjuntos de funções que foram feitas por alguém e que podem ser usadas por outros programas sem que nos preocupemos com o código dessas funções.

Além da vantagem de organizar o código, bibliotecas também têm a vantagem de poderem ser utilizadas em vários programas sem necessidade de copiar grandes trechos de código; basta dizer ao compilador que queremos adicionar aquela biblioteca ao executável.

Por exemplo, vamos tentar criar a nossa própria biblioteca, com duas funções: uma para gerar números (pseudo-)aleatórios e uma para calcular o valor de pagamento de uma amortização com juros compostos. Também incluiremos uma função para gerar um número inicial a partir da hora atual, o que fará com que as sequências de números não sejam sempre as mesmas.

Chamaremos a biblioteca de teste1.

#include <math.h>
#include <time.h>

int rand_seed = 10; /* Gerador de números pseudo-aleatórios */

int rand () {

rand_seed = rand_seed * 1103515245 + 12345;

return (unsigned int) (rand_seed / 65536) % 32768;

}

void init_seed () {

rand_seed = time (NULL);

} /* Cálculo do valor de cada pagamento de uma amortização * Dados: vp = valor presente; * n = número de pagamentos; * i = taxa de juros (em formato decimal) */

double vf (double vp, int n, double i) {

return (vp * i * pow (1 + i, n — 1) / (pow (1 + i, n) — 1));

}

As linhas acima são o arquivo do código da nossa biblioteca(Você salvará no compilador como um arquivo com extensão “.h”).Abaixo está o código de um programa que testará essa biblioteca. Lembre-se de que os dois trechos devem estar em arquivos separados.

#include <stdio.h>

int main() {

int r1, r2, n_pgtos; double a_vista, juros, v_pgto;

r1 = rand ();

r2 = rand ();

printf (“Números aleatórios: %d, %d\n\n”, r1, r2);

printf (“ Valor à vista: “);

scanf (“%lf”, &a_vista);

printf (“Número de pagamentos: “);

scanf (“%d”, &n_pgtos);

printf (“ Taxa de juros: “);

scanf (“%lf”, &juros);

juros /= 100; /* converte a porcentagem em número */

v_pgto = vf (a_vista, n_pgtos, juros);

printf (“Valor de cada pagamento: %lf \n”, v_pgto);

}

Algo que você deve ter notado é que nesse arquivo não demos nenhuma informação sobre as funções vf e rand nele usadas. Realmente, se você tentar compilar o código como está, o compilador dará um aviso; mas ao tentar criar o executável, o montador não poderá continuar pois não recebeu nenhuma informação sobre onde as funções estão.

Para isso, precisamos realizar três passos adicionais antes de compilar o programa teste:

  1. Fazer um arquivo-cabeçalho com informações sobre as funções. Esse arquivo será incluido com a diretiva #include, da mesma maneira que cabeçalhos padrão como “stdio.h” ou “math.h”.
  2. Compilar a biblioteca separadamente.
  3. Instruir o compilador/montador a procurar pela biblioteca ao compilar o programa teste.

Algumas Bibliotecas Básicas em C:

A biblioteca <stdio.h>

Standard Input Output(entradas e saídas padrão): Este cabeçalho contém a definição da estrutura FILE, usada para todas as entradas(input) e saídas(output), além das definições de todas as funções que lidam com a abertura, fechamento, etc, de arquivos. A famosa função printf também é definida aqui, juntamente com sprintf, fprintf e toda a família de funções relacionadas com esta biblioteca.

A biblioteca <math.h>

Funções matemáticas: sin, cos, tan, log, exp, etc. Aqui encontramos trigonometria(sin, cos, tan, atan, etc.), arredondamentos(ceil, floor), logaritmos(log, exp, log10, etc.), raiz quadrada e cúbica(sqrt, cbrt), constantes como PI e as quatro operações matemáticas mais simples como somar, subtrair, multiplicar e dividir.

Vejamos então, alguns exemplos do uso dessa biblioteca na prática, para um melhor entendimento do leitor a respeito de suas funcionalidades. No primeiro exemplo apenas uma soma simples e, os seguintes, um pouco mais complexos para visualização de como eles funcionam.

A biblioteca <stdlib.h>

Diversas operações, incluindo conversão, geração de números pseudo-aleatórios, alocação de memória, controle de processo, sinais, busca e ordenação.

Em seguida vemos o programa depois de compilado sendo executado.

A biblioteca <string.h>

A biblioteca string.h possui uma série de funções que são utilizadas para manipular strings.Iremos ver a aplicação dessas bibliotecas nos próximos momentos do curso.

:D

fontes utilizadas:

Sign up to discover human stories that deepen your understanding of the world.

--

--

Diego Nascimento
Diego Nascimento

Written by Diego Nascimento

20, like things that flies, photo nonsense things, PhD in Procrastination. Computer Engineering student and Liferay's intern.

No responses yet

Write a response