Iniciar Conhecimentos Sobre C

Started by Codeas, November 12, 2008, 05:43:58 PM

Previous topic - Next topic

Codeas

Como tenho algum tempo livre decidi tentar iniciar alguns conhecimentos sobre C ou C++, li umas coisas usei o Kwrite do Mandriva e tentei o programa básico.

#include<stdio.h>

int main()
{
printf ("Olá Amigo! \n");
return (0);
{

criei a pasta ProjectosC e guardei lá o meu programa ola.c, a indicação do tuturial diz para usar o comando gcc -c ola.c
Abri a consola e...

[daddy@localhost ProjectosC]$ gcc -c ola.c
ola.c: In function ââ,¬Ëœmainââ,¬â,,¢:
ola.c:7: error: expected declaration or statement at end of input
ola.c:7: error: expected declaration or statement at end of input
[daddy@localhost ProjectosC]$

Na minha ignorância deve faltar-me alguma coisa. O que será?
Obrigado.

HBK

Quote from: CodeasComo tenho algum tempo livre decidi tentar iniciar alguns conhecimentos sobre C ou C++, li umas coisas usei o Kwrite do Mandriva e tentei o programa básico.

#include<stdio.h>

int main()
{
printf ("Olá Amigo! \n");
return (0);
{
troca o ultimo { por }
<a href="http://twitter.com/pm201" target="_blank" rel="nofollow"]</a>


mas que raio?

DiogoOliveira

Pois.

{ para abrir e } para fechar

southafrikanse

Porque tens a função main a retornar um int?

Todos os códigos que vi, o main nunca retorna nada (deveria ser void). Podes me explicar qual é a vantagem?
Blog Pessoal | Tugatrónica | Fórum Webtuga
"Knowledge is knowing that a tomato is a fruit, but Wisdom is knowing not to put it in a fruit salad."

KTachyon

Normalmente tem que se retornar um int, caso contrário o compilador dá um warning que informa que o código não está de acordo com o C99. O int serve para o processo comunicar ao processo mãe em que condições terminou.
My Q4 estimate: Macs: 5.89M; iPods: 4.19M; iPhones: 30.0M; iPads: 18.05M; Revenue: 37.00B; EPS: 9.50
AAPL Q3 result: Macs: 4.02M; iPods: 6.80M; iPhones: 26.0M; iPads: 17.04M; Revenue: 35.02B; EPS: 9.32

southafrikanse

Se tu o dizes KTachyon.

Mas nos casos em que estás a programar em C para microcontroladores como não há a tal classe "Mãe" que falas deve ser por isso que é void.
Blog Pessoal | Tugatrónica | Fórum Webtuga
"Knowledge is knowing that a tomato is a fruit, but Wisdom is knowing not to put it in a fruit salad."

KTachyon

#6
É uma coisa que se deve a como o C começou a ser desenvolvido.

No início o C não tinha void, logo todas as funções retornavam qualquer coisa (normalmente um int), mesmo que esse valor não fosse utilizado. Quando o void foi implementado, não foi feito sem valor de retorno, pelo contrário, continua a apontar para um espaço de memória que contém lá qualquer coisa, que não foi modificada.

Para um programa que vai criar um processo filho, o retorno desse processo será o retorno da função main, que se for void, vai ser um valor "aleatório", que por acaso se encontrava em memória naquela altura.

No caso de o sistema operativo lançar um programa que tenha sido programado com void main(), quando esse programa termina, o sistema operativo vai receber o valor, podendo considerar o retorno como erro, considerando que o programa falhou e registando nos logs, informando o utilizador,... Entre outras coisas "feias".

Por isso foi criado o standard C99, que "obriga" a que o main retorne um int. Os compiladores que seguem este standard (que são práticamente todos hoje em dia), dão warning quando encontram a função main a retornar void. Continuam a permitir, mas avisam que não deve ser feito.

Existem mais coisas que podem parecer "estranhas" neste standard. Por exemplo, um que eu nunca percebi muito bem é obrigar-nos a colocar uma linha em branco no final de cada ficheiro com código fonte.
My Q4 estimate: Macs: 5.89M; iPods: 4.19M; iPhones: 30.0M; iPads: 18.05M; Revenue: 37.00B; EPS: 9.50
AAPL Q3 result: Macs: 4.02M; iPods: 6.80M; iPhones: 26.0M; iPads: 17.04M; Revenue: 35.02B; EPS: 9.32