Funções extras no EP modularizado

Funções extras no EP modularizado

por Renato Cordeiro Ferreira -
Número de respostas: 4

Olá, 

Comecei a usar o EP modularizado que o professor Coelho colocou faz pouco tempo. o que não consegui encontrar, entre os arquivos, foi uma área disponível para criar outras funçõecontao qual havia no esqueleto original. Como posso fazer, neste caso? Posso colocar as funções extras ao final do arquivo correspondente? (quero fazer alguns funções auxiliares para o quicksort, então devo colocá-las no filmes.c?) E, caso sim, devo adicionar necessariamente os protótipos delas nos headers? (E isso me suscita a pergunta de se posso fazer funções de uso interno não acessíveis fora da biblioteca)

Obrigado

Em resposta à Renato Cordeiro Ferreira

Re: Funções extras no EP modularizado

por Victor Sanches Portella -

Também gostaria de saber isso professor.

Comecei o EP a pouco tempo e estou fazendo ele pelo esqueleto modularizado,  e eu sempre gosto de fazer algumas funções auxiliares.

Por enquanto eu estou declarando os protótipos das minha funções "de uso interno" no proprio aruqivo .c, ja que elas só serão usadas naquele arquivo. (Ainda não testei pra ver se compila, mas acho que compila sim).

Eu também pensei em faze-las no utils, mas como ela só é usada em um arquivo, nao vi muita razão de declara-la no utils.

Obrigado.

Em resposta à Victor Sanches Portella

Re: Funções extras no EP modularizado

por José Coelho de Pina -

Salve,

A idéia é colocar uma funções onde vocẽs acham "mais razoável". Por exemplo, no arquivo main.c há uma função leOpcao. Essa função é apenas usada pelo main. Em utils.c podemos, digamos, colocar nossas funções prediletas e que usamos frequentemente, inclusive em outras programas: mallocSafe, leString...

Uma função que manipula apenas a lista de filmes e razoável que seja colocada em filmes.c. Utilizando este raciocínio, uma função que seja auxiliar da função quickSort deveria ser colocada no arquivo filmes.c como static (que é o "private do C"). Vejam, por exemplo as declarações:

 
/* funcoes rIndex e erroLeitura sao usadas apenas neste arquivo */ 
static char *rIndex(char *pal, char letra); 
static void erroLeitura(char *msg, char *lin); 

no arquivo iofilmes.c.

Em resposta à José Coelho de Pina

Re: Funções extras no EP modularizado

por Victor Sanches Portella -

Obrigado pela repsosta professor.

Mas acabei criando outras dúvidas, haha mostrando a língua.

É necessário colocar static tanto no protótipo da função quanto em sua implementação (tudo isso no arquivo .c), ou colocar só o protótipo como static ja é o suficiente?

E outra coisa. Como a função só está sendo declarada no arquivo .c,  e não no .h, essa função ja não seria "invisivel" para os outros arquivos? Se sim, qual seria a razão de definir a função como static?

Em resposta à Victor Sanches Portella

Re: Funções extras no EP modularizado

por José Coelho de Pina -

É necessário colocar static tanto no protótipo da função quanto em sua implementação (tudo isso no arquivo .c), ou colocar só o protótipo como static ja é o suficiente?

Os dois protótipos devem ser iguais. Experimente compilar escrevendo uma função com o static e outra sem.


E outra coisa. Como a função só está sendo declarada no arquivo .c,  e não no .h, essa função ja não seria "invisivel" para os outros arquivos?


Não, essa função poderia ser usada por outros programas/arquivos. Para isto bastaria colocarmos, digamos, no arquivo do meu-programa.c o protótipo da função (para não dar erro de sintaxe) e mandar "linkar" e com ".o" que contém o código da função. Para brincar um pouco, faça uns testes bem pequenos, por exemplo coloque em um arquivo uma função de protótipo void oi(); que só imprime um "oi" e compile gerando o .o (gcc -c). Depois em um outro arquivo contendo o main use essa função (precisa colocar o protótipo da função oi nesse arquivo). Repita o mesmo teste colocando o static no protótipo da oi.