Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

edvaldo bindi

retorno de main

Recommended Posts

:mellow:/> EI PESSOAL TENHO UMA CURIOSIDADE QUE QUERIA SABER

QUANDO CRIAMOS UMA FUNÇÃO EM C/C++ TEMOS QUE INFORMAR SE ELA RETORNA(INT FLOAT, ETC)OU NÃO RETORNA(VOID) UM VALOR, MAS PARA QUE SERVE O RETURN DA FUNÇÃO MAIN O VALOR RETORNADO VAI PARA ONDE, QUAL A DIFERENÇA DE RETORNAR OU NÃO JÁ QUE O PROGRAMA FUNCIONA COM OU SEM ELE. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O return não deve ser entendido apenas como uma maneira de retornar um valor para a função que o chamou, mas pode ser visto como um goto encapsulado, que faz com que o usuário abandone tudo o que estava fazendo.digamos que a função não deva retornar nada (void), você poderá usar o return para que seja abandonada antes de ela chegar no final.Um sinal de return sem retornar nada antes da última chave da função não quer dizer nada. Assim,

    return;}

O programa funciona com ou sem ele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você atribiu um tipo de valor para o main, você terá q usar o return, Ex:int main (void){...return 0;}Caso você não queira usar o return, geralmente é a opção que eu sempre utilizo, seria você declará-la como void, Ex:void main (void) // a opção void nos parênteses significa q não nenhum parâmetro inicial{...}Em C ou C++, toda vez que falarmos que a função retorna algum valor teremos que utilizar o return, costumamos dizer funções são o retornam algum valor e as do tipos void (não retornam valor) seriam procedures, Ex:#include <stdio.h>...int soma (int a, int b );void imp (int num);void main (void){ int v1 = 10, v2 = 30, total; total = soma(v1, v2); imp(total);}int soma (int a, int b ){ int valor; valor = a + b; return valor}void imp (int num){ printf("valor: %d", num); getch();}Espero q tenha te ajudado a enteder utilização do return e as funções em C ou C++.Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode entrar no site do criador do C++ na secao se faqs (no meu servico nao posso pegar o link dele) la ele fala sobre esta questao, o void era utilizado antigamente mas e mantido por questoes de compactibilidade, mas a convencao atual e utilizar int main() pois o programa pode retornar valor pro sistema operacional.. depois pego o link do site ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas correções:

 

Em C, sempre é preciso declarar main como retornando valores de tipo (int). Algumas implementações podem optar por suportar outros tipos, mas isto é menos portável.

 

Em C99 e C11 (última versão da linguagem), o return é implícito em main. Se não existir explicitamente, o programa se comporta como se a última instrução fosse esta.

 

Ao criador do tópico: não use caracteres desnecessários para chamar atenção ao post. Vou corrigir mais este.

 

Por favor, leia e siga as instruções da minha assinatura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa história de return já foi discutida: http://forum.imasters.com.br/topic/322646-programando/

 

O goto não é nada parecido com o return. O return envolve desempilhar os parâmetros/valores do stack pointer e mais algumas operações com o base pointer, além de uma instrução ret p/ retornar a execução para o caller, normalmente colocando um valor de retorno no $eax. O goto é um jump incondicional p/ uma parte qualquer do código, sem mexer no stack.

 

RenatoLima, a função main sempre deve retornar um inteiro ou tipo compativel (ISO C, estamos falando de portabilidade aqui). Também já houve discussões sobre isso, dizendo que ela é apenas uma função como outra qualquer, o que permitiria que ela retornasse outros tipos de dados.

 

Não é bom assumir que o compilador adiciona coisas que não especificamos no fonte:

 

#include <stdio.h>
int main(void) {
 printf("Teste main sem retorno\n");
}

 

Aparentemente, correto. Mas se eu der um strace, a última chamada de sistema é um write, que resulta nisso:

 

write(1, "Teste main sem retorno\n",23) = 23

exit_group(23)

+++ exited with 23 +++

 

Se eu der um echo $? p/ pegar o código de saída do programa, ele vai exibir 23 e não um zero "automagicamente" inserido pelo compilador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isis, nas duas últimas versões da linguagem C, o return 0 da main é implícito. Se sua implementação não gera comportamento equivalente ao dos casos implícitos, das duas, uma:

 

1. Ela não implementa C99 nem C11;

2. Ela está quebrada.

 

n1570, 5.1.2.2.3p1: "reaching the } that terminates the main function returns a value of 0."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Guidjos, por isso eu disse que não é bom assumir que o compilador coloca coisas que não especificamos. Não falei nada sobre o ISO C estar errado ou o meu compilador estar certo.

 

A flag -std padrão não é nem c99 nem c11 no GCC aqui (deve ser c89 ou algo assim). Tanto que se for compilado com -std=c99, ele retornará um zero.

 

Se o cara quer o return 0, o melhor a fazer é explicitar a linha do que ficar, depois, quebrando a cabeça quando a coisa não funciona por causa de um compilador diferente. Ainda mais se não conhece os padrões e nem o compilador, como é o caso geral da galera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.