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);
}
- Home
- >
- Fórum
- >
- Profissional
- >
- Programação, Sc...
- >
- Uso do Comando return em...
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.
pq o main na verdade é int neh, o certo é declarar int main e ai no final vc coloca um return 1 (por exemplo)
mas qual a finalidade dela ser um int? ela vai retornar pra quem? pra ela mesma?
Papitojqueiroz, e quanto ao retorno da função main ??
pq o main na verdade é int neh, o certo é declarar int main e...
vai retornar para o programa que o invocou. e normalmente um 'return 0' significa que terminou correctamente.
Ele retorna para o sistema operacional.
Em alguns sistemas vc pode pegar este código de retorno e fazer alguma operação. Nos sistemas unix é comum retornar um codigo diferente de 0 para sinalizar algum erro. Vc pode pegar este código via variavel $? no bash.
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
ocasionalmente eu brinco com C ;-)
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
Papitohmmm, 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.
agora eu li o q escrevi lah em cima e realmente ficou confuso, foi mal ai galera
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
Papitohmmm, 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".
peczenyjalias 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.
jackinaboxNã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...