Logo Hardware.com.br
jpc777
jpc777 Veterano Registrado
839 Mensagens 66 Curtidas

Uso do Comando return em funções C

#1 Por jpc777 28/06/2006 - 08:42
Certa vez, perguntei: quando usar o comando return, obtive a seguinte resposta:

“amigo, pelo q sei é o seguinte:
você sempre q antes do nome da função usar algo diferente de VOID (void qr dizer q não retorna), vc precisa de um return que retorne alguma variavel ou algum valor do tipo declarado antes do nome da função.”

OK. Num primeiro momento atendeu. Entretanto preciso de mais detalhes. Que tipo de problema posso ter se usar return sem uma variável de retorno ou não usar return? é verdade que se return não tiver um valor específica, retorna 0 (zero) ?

float mostra (void);
Int main()

{
mostra();
}

float mostra (void)

{
int a =5, b = 2;
float resultado =0;

resultado = a / b;

printf (“o resultado é: %f “, resultado)
return;
}

ou

float mostra (void);
Int main()

{
float r;
r= mostra();
printf (“o resultado é: %f “, r);
}

float mostra (void)

{
int a =5, b = 2;
float resultado =0;
resultado = a / b;

}

ou

int soma ()

{
int a=2,b=2, total=0;

total = a + b;

printf (“total %d \n”, total);

}


Responder
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#2 Por jqueiroz
28/06/2006 - 13:46
Que tipo de problema posso ter se usar return sem uma variável de retorno ou não usar return? é verdade que se return não tiver um valor específica, retorna 0 (zero) ?

"return" sem valor, simplesmente retorna o controle para a função que chamou a função corrente. Nenhum valor de retorno é passado, ou seja, o valor de retorno é indefinido.

Você usa "return" sem valor em funções que tenham sido definidas como retornando o tipo "void". Em qualquer outro tipo de retorno, usar "return" sem valor é errado, apesar de ser tratado por muitos compiladores como um "warning" (erro não fatal).

PS: http://forumgdh.net/viewtopic.php?t=229032

PS²: Não existe um tipo "Int"; existe, sim, "int". Maiúsculas e minúsculas fazem diferença.

PS³: Se você não define o retorno da função, é como se você colocasse um "return" sem valor ao final dela.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
Papito
Papito Super Participante Registrado
1.1K Mensagens 0 Curtidas
#6 Por Papito
28/06/2006 - 15:04
hmmm, interessante, eu sempre achei q os valores de return do main fossem iguais das funções que a gente mesmo cria....
pq nas funções q a gente cria é como se fosse um valor booleano não é? tipo 1 = true e 0 = false

cada coisa neh :wink:

só uma dúvida, vcs trabalham com programação em C no dia a dia? pq conhecer tanto assim uma linguagem tem q lidar com ela o dia todo
"Se debugar é a arte de retirar bugs de um programa, programar deve ser a arte de inserí-los"
intruso
intruso Tô em todas Registrado
1.8K Mensagens 41 Curtidas
#8 Por intruso
28/06/2006 - 16:17
só para acrescentar...

main é uma função que é chamada pelo sistema operacional, os valores que você deve retornar no fim do seu programa dependem do SO, inclusive main também recebe argumentos do SO, vide programas para linha de comando.

return pode retornar o valor de uma expressão ou retornar o controle para quem chamou a função atual.

exemplo1:



int errado(int a, int b)
{
a=b=5;

return (a/b)+5*7;
}



Errado.

retorna o resultado da conta, mas, deve-se lembrar que o tipo de valor retornado deve ser coerente com o resultado da expressão usada no return, no exemplo acima, nem sempre a/b vai ser um inteiro, logo essa função poderia retornar um double, se eu usar um int, podemos perder informação (truncar o resultado).

exemplo2:



void teste(int a, int b)
{

while(b<==10)
{
if(b==9)
{
a=b+56;
return;
}
else
{
b++;
}
}

}


repare que quando b for igual a 9 o loop faz uma conta diferente do incremento e depois retorna para quem a chamou sem retornar valor algum, inclusive o tipo de retorno da função é void. Totalmente coerente, mas só serve como ilustração :mrgreen: , já que as funções quando são chamadas realizam uma cópia dos argumentos para não modificar a variavel original e como essa função não retorna nada e nem exibe ela não serviria pra nada, no entanto, se eu usar ponteiros como argumentos a função poderia ser tranquilamente utilizada, apesar de que era mais prático incluir o loop no código a perder tempo com uma chamada de função.

abraço
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#9 Por jackinabox
28/06/2006 - 17:56
Papito
hmmm, interessante, eu sempre achei q os valores de return do main fossem iguais das funções que a gente mesmo cria....
pq nas funções q a gente cria é como se fosse um valor booleano não é? tipo 1 = true e 0 = false

Não sei se entendi o que você quis dizer. Cada função tem um tipo de retorno, como:

int
int *
char
char *
char **
struct UmaStructQualquer *

E mais uma infinidade de possíveis tipos, tanto predefinidos quanto definidos pelo programador. Portanto, não é "como se fosse um valor booleano". Isso sem falar que em C não há um tipo booleano, mas acho que isso você já sabia.
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
Papito
Papito Super Participante Registrado
1.1K Mensagens 0 Curtidas
#10 Por Papito
29/06/2006 - 00:56
jackinabox, lá em cima o q eu quis dizer é de quando vc cria algumas funções onde vc faz com q o retorno delas seja 1 ou 0 (true ou false) q fica sendo como um valor booleano...

agora eu li o q escrevi lah em cima e realmente ficou confuso, foi mal ai galera oops.png
"Se debugar é a arte de retirar bugs de um programa, programar deve ser a arte de inserí-los"
peczenyj
peczenyj Geek Registrado
3K Mensagens 75 Curtidas
#11 Por peczenyj
29/06/2006 - 01:24
jackinabox, lá em cima o q eu quis dizer é de quando vc cria algumas funções onde vc faz com q o retorno delas seja 1 ou 0 (true ou false) q fica sendo como um valor booleano...


os condicionais em C entendem o 0 e não zero como sendo verdadeiro|falso

faça um

printf("verdadeiro: %d falso:%d\n",(1==1),(1!=1));


mas isto é um 'uso' para um return. as vezes é declarado um tipo de dado como sendo booleando (geralmente short int) para emular um bool em C.

alias eu adoraria que tivesse um tipo boolean oops.png
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#12 Por jqueiroz
29/06/2006 - 12:49
Papito
hmmm, interessante, eu sempre achei q os valores de return do main fossem iguais das funções que a gente mesmo cria....
pq nas funções q a gente cria é como se fosse um valor booleano não é? tipo 1 = true e 0 = false

De certa forma, você está certo. Só que main(), assim como várias outras funções, retorna um código de erro, e não um valor booleano.

Ou seja: a condição a ser testada é "houve erro???" --- o valor "falso" indica que "não houve erro", o valor verdadeiro indica que "houve erro". wink.png

peczenyj
alias eu adoraria que tivesse um tipo boolean

Se eu não me engano alguns compiladores "moderninhos" definem [por typedef] o tipo "bool" e as constantes "TRUE" e "FALSE".

os condicionais em C entendem o 0 e não zero como sendo verdadeiro|falso

acho que vc se confundiu aí na redação... Quase todas as linguagens entendem "0" como falso e "não zero" como verdadeiro. C não é exceção.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
vini_bill
vini_bill Super Participante Registrado
592 Mensagens 0 Curtidas
#13 Por vini_bill
30/06/2006 - 07:32
jackinabox
Não sei se entendi o que você quis dizer. Cada função tem um tipo de retorno, como:

int
int *
[b...


O que não quer dizer que seja dificil criar uma variavel booleana:

typedef enum bool 
{
true;
false;
};


declrando-se a variavel como:

(...)
bool nome_variavel;
(...)


Dai é só trabalhar como se false fosse igual a 1 e true igual a 0.

... Vinicius Menezes ...

p.s.: não testei o código mas deve funcionar...
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal