• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Ziwdon

[Resolvido] Posicionamento de Funções

11 mensagens neste tópico

Boas

Como todos sabem, em C, para chamarmos uma função esta tem de ser declarada antes de a chamarmos.

Ora...isto leva-me a um problema. É que eu tenho duas funções que se chamam uma à outra...e agora?

Algo deste género:

void funcao1() {
   funcao2();
}

void funcao2() {
   funcao1();
}

Como faço para solucionar o problema?

Obrigado

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Definida não obrigatoriamente, declarada.

Protótipo.

Era o que queria dizer...declarada ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


void funcao1();
void funcao2();

void funcao1() {
   funcao2();
}

void funcao2() {
   funcao1();
}

Se não usares os void acho que não precisas de declarar antes, mas a resposta à tua dúvida está em cima.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Simples!

Desconhecia que se podia fazer isso...é que nas aulas o gajo só disse mesmo que para chamarmos funções (sem retorno de valores) usávamos o void e que as funções tinham de estar organizadas de forma X. Eu perguntei se não era possivel fazer de modo diferente e ignorar o posicionamente e ele respondeu que sim, mas não quis explicar e disse para fazermos assim. lol.

Testei sem o 'void' e também resultou.

Muito obrigado ;)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu penso que o tirares void e funcionar tem a ver com o facto de nesse compilador por omissão se não puseres nada ele dizer que é void, mas penso que nem em todos os compiladores pode ser assim, logo aconselho que uses void.

Estarei errado ?

Vamos ver quem esteja mais dentro do assunto o que diz.. mas penso que seja isto..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O comportamento que o compilador deve ter que está definido nas normas é que, quando é omitido o tipo de uma função, o compilador deve assumir int.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O comportamento que o compilador deve ter que está definido nas normas é que, quando é omitido o tipo de uma função, o compilador deve assumir int.

Sendo assim não é estranho não dar erro ? Ele tá a declarar duas funções que retornam um int e ele tá a definir duas que retornam void ...

A não ser que ele tenha tirado em todas ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não tirei nenhum void...optei pela opção do Hipnoted mesmo por achar mais correcta. Mas experimentei sem void e correu bem.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deveria dar erros por não existir return dentro das funções...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A não ser que ele tenha tirado em todas ;)

Tem que se ser consistente. Ou retira-se em todos os sítios ou não se retira em nenhum. O meu conselho é especificar sempre o tipo de retorno de uma função. Mesmo que o compilador assuma int no caso de não se colocar nada, o ideal é colocar sempre qual o tipo de retorno. Evita erros e poupa trabalho ao compilador  :D Se se fizer a asneira de não colocar tipo de retorno (o compilador assume int) e não se fizer nenhum retorno de inteiro na função temos um warning (warning: control reaches end of non-void function) usando gcc. Noutros compiladores podemos ter de facto um erro. Por isso é que é boa norma especificar sempre tudo (tipos de retorno, parâmetros, código consistente com isto, ...) incluindo protótipos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora