Autor Tópico: Iniciar Conhecimentos Sobre C  (Lida 1838 vezes)

Codeas

  • Novato
  • *
  • Mensagens: 1
  • Karma: 0
    • Ver Perfil
Iniciar Conhecimentos Sobre C
« em: Novembro 12, 2008, 05:43:58 »
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

  • Membro Pro
  • Uber Geek
  • ****
  • Mensagens: 366
  • Karma: 0
    • Ver Perfil
Iniciar Conhecimentos Sobre C
« Responder #1 em: Novembro 19, 2008, 12:45:10 »
Citação de: 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);
{
troca o ultimo { por }
<a href="http://twitter.com/pm201" target="_blank" rel="nofollow"][/url]


mas que raio?

DiogoOliveira

  • Novato
  • *
  • Mensagens: 4
  • Karma: 0
    • Ver Perfil
Iniciar Conhecimentos Sobre C
« Responder #2 em: Novembro 19, 2008, 04:32:18 »
Pois.

{ para abrir e } para fechar

southafrikanse

  • A noob in a geek world
  • Administrador
  • Heroi da Nação
  • *****
  • Mensagens: 3944
  • Karma: 8
  • Esforço, Dedicação, Devoção e Glória
    • Ver Perfil
    • Tugatrónica
Iniciar Conhecimentos Sobre C
« Responder #3 em: Novembro 20, 2008, 02:22:24 »
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

  • iOS Software Engineer
  • Super-Moderador
  • Heroi da Nação
  • *****
  • Mensagens: 4311
  • Karma: 0
  • Software Engineer
    • Ver Perfil
    • Google+
Iniciar Conhecimentos Sobre C
« Responder #4 em: Novembro 20, 2008, 04:03:27 »
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.
Citação de: Steve Ballmer
There's no chance that the iPhone is going to get any significant market share. No chance.
Current status: 146.019.000 iPhones sold 'til Oct 2011.
iPad: 39.850.000 iPads sold 'til Oct 2011.
Over 250.000.000 iOS devices sold 'til Oct 2011.

Apple is the 2nd most valuable public company in the world.

southafrikanse

  • A noob in a geek world
  • Administrador
  • Heroi da Nação
  • *****
  • Mensagens: 3944
  • Karma: 8
  • Esforço, Dedicação, Devoção e Glória
    • Ver Perfil
    • Tugatrónica
Iniciar Conhecimentos Sobre C
« Responder #5 em: Novembro 20, 2008, 10:41:07 »
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

  • iOS Software Engineer
  • Super-Moderador
  • Heroi da Nação
  • *****
  • Mensagens: 4311
  • Karma: 0
  • Software Engineer
    • Ver Perfil
    • Google+
Iniciar Conhecimentos Sobre C
« Responder #6 em: Novembro 20, 2008, 12:14:41 »
É 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.
« Última modificação: Novembro 20, 2008, 12:15:12 por KhAoTiK_TaChYoN »
Citação de: Steve Ballmer
There's no chance that the iPhone is going to get any significant market share. No chance.
Current status: 146.019.000 iPhones sold 'til Oct 2011.
iPad: 39.850.000 iPads sold 'til Oct 2011.
Over 250.000.000 iOS devices sold 'til Oct 2011.

Apple is the 2nd most valuable public company in the world.