Ir para o conteúdo
jonhhy

estrutura de um programa básico em c

Mensagens Recomendadas

jonhhy    0
jonhhy

Boa tarde, que distinção e utilidades(para que são destinados) estas 2 formas diferentes de estruturar um programa em C:

#include <stdio.h>
int main (void)
{
printf("Hello World");
return 0;
}
/*final do 1º programa, início do outro*/
#include <stdio.h>
main ()
{
printf("Hello World");
}

Agradeço as vossas respostas

Cumpr' Jonhhy

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

a única diferença nos dois programas é simplesmente o valor de retorno.

as duas formas standard (protótipos) da função main (é a única com este privilégio de poder ter mais do que uma) são :

- int main(void)

- int main(int argc, char ** argv)

como vês, nem sequer está listada o protótipo da tua segunda aplicação:

- void main(void)

agora, o porque de isso ser aceite em alguns compiladores.

pensa no que representa o valor de retorno da função main. para que serve.

hoje em dia não serve para nada. os SO não respondem ao valor de retorno da execução de uma aplicação, algo que era comum antigamente.

então veio a ideia de que não existe sentido que a função main seja obrigada a retornar um valor, visto que não se faz nada com ele. foi então que se começou a "aceitar" o terceiro protótipo.

no entanto, esse protótipo não faz parte do standard da linguagem C, o que pode trazer problemas se quiseres compilar o código em compilador mais antigos ou "mesquinhos".

conclusão : como um programador nunca deve se conter com a aplicação só porque, por acaso, corre no seu computador, esquece a terceira forma e escreve sempre o main a retornar o valor inteiro como deve ser.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pwseo    223
pwseo

(...) hoje em dia não serve para nada. os SO não respondem ao valor de retorno da execução de uma aplicação, algo que era comum antigamente.

então veio a ideia de que não existe sentido que a função main seja obrigada a retornar um valor, visto que não se faz nada com ele. foi então que se começou a "aceitar" o terceiro protótipo.

(...)

Depende do SO. Em sistemas *nix, como exemplo, o valor de retorno pode ser (e é!) utilizado quando encadeamos a execução de diversos programas: se um deles devolver um valor diferente de 0, toda a cadeia é interrompida nesse momento (conseguimos isto com o operador && da bash, por exemplo).

Um exemplo:

cd somedir && rm *

O comando acima só irá executar “rm *” se o comando anterior (cd somedir) for bem sucedido (ou seja, se devolver 0 ao SO).

Mais um pequeno pormenor: quando estamos a compilar em C99 (passando ‘-std=c99’ ao gcc), podemos omitir essa instrução (é considerada implícita):

int main(void) {
 puts("Hello there!");

 /* em C89 seria necessário acrescentar aqui ‘return 0;’ */
}

Editado por pwseo

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

Depende do SO. Em sistemas *nix, como exemplo, o valor de retorno pode ser (e é!) utilizado quando encadeamos a execução de diversos programas:

eu disse que o SO não faz nada com isso, não disse que outras aplicação não o façam


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pwseo    223
pwseo

Certo, o kernel em si não quer saber do exit status, mas outros programas que são parte essencial do SO em questão usam-no frequentemente (neste caso)

Ainda assim, não é nestes preciosismos que vale a pena focar a atenção. Interessa sim saber que apesar de tudo, o valor pode ser utilizado com relativa facilidade e que isso é feito em muitos sistemas -- é boa política utilizar o valor de retorno de forma correcta.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jonhhy    0
jonhhy

Consegui correr o programa sem necessitar do return.

imagem do programa (no link).

Depende do SO. Em sistemas *nix, como exemplo, o valor de retorno pode ser (e é!) utilizado quando encadeamos a execução de diversos programas: se um deles devolver um valor diferente de 0, toda a cadeia é interrompida nesse momento (conseguimos isto com o operador && da bash, por exemplo).

Um exemplo:

cd somedir && rm *

O comando acima só irá executar “rm *” se o comando anterior (cd somedir) for bem sucedido (ou seja, se devolver 0 ao SO).

Mais um pequeno pormenor: quando estamos a compilar em C99 (passando ‘-std=c99’ ao gcc), podemos omitir essa instrução (é considerada implícita):

int main(void) {
 puts("Hello there!");

 /* em C89 seria necessário acrescentar aqui ‘return 0;’ */
}

http://imageshack.us/content_round.php?page=done&l=img594/1690/hou5.png&sa=0 Editado por jonhhy

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.