Jump to content
jonhhy

estrutura de um programa básico em c

Recommended Posts

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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;’ */
}

Edited by pwseo

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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 Edited by jonhhy

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.