• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Acqua

[Resolvido] Erro e não sei a razão dele

7 mensagens neste tópico

boas! tava eu entretido a fazer os exemplos do livro "linguagem c" quando me deparo com uma situação estranha: chego ao capitulo das funções e procedimentos e nos 2 primeiros exemplos que dão sobre funções (para quem tem o livro, prog0503 e prog0504) e dá-me um erro igual em ambos. Aqui vai um exemplo:

Exercicio: que apareça o output

***

*****

*******

*****

***

Código:

#include <stdio.h>

linha3x()
{
         int i;
         for (i=1 ; i<=3 ; i++)
         putchar('*');
         putchar('\n');
}

linha5x()
{
         int i;
         for (i=1 ; i<=5 ; i++)
         putchar('*');
         putchar('\n');
}

linha7x()
{
         int i;
         for (i=1 ; i<=7 ; i++)
         putchar('*');
         putchar('\n');
}

main()
{
      linha3x();
      linha5x();
      linha7x();
      linha5x();
      linha3x();
}

erro: linha 4,12 e 20 - ISO C++ forbids declaration of `linha' with no type

pergunta: qual a razão para este erro? desde já obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é erro do livro, o problema são as regras usadas na compilação do código.

A razão do erro é que o ISO C++ não permite que as funções não tenham um tipo de retorno definido, nem que seja void.

Se declarares linha3x, etc como void linha3x etc o erro desaparece...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou então remove toda as flags de compilação.

Se estiveres a usar o gcc compila somente como "gcc prog0503.c -o prog0503".

Ou então uma boa ideia seria alterar o teu código para:

#include <stdio.h>

void linha3x()
{
         int i;
         for (i=1 ; i<=3 ; i++)
         putchar('*');
         putchar('\n');
}

void linha5x()
{
         int i;
         for (i=1 ; i<=5 ; i++)
         putchar('*');
         putchar('\n');
}

void linha7x()
{
         int i;
         for (i=1 ; i<=7 ; i++)
         putchar('*');
         putchar('\n');
}

int main()
{
      linha3x();
      linha5x();
      linha7x();
      linha5x();
      linha3x();
      return 0;
}

Um bom hábito de programação é compilar sempre com todos os warnings ligados (os avisos -> o programa funciona, mas recebes um aviso de que algo que fizeste é menos correcto).

Eu compilo sempre com "gcc prog0503.c -Wall -pedantic -O2 -o prog0503"

Wall = Warnings all (todos os avisos)

pedantic = seguir as normas do ANSI C

O2 = optimizações de velocidade. O compilador optimiza o programa para velocidade, mesmo que para isso fique ligueiramente maior.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que eu fiz foi exactamente isso, adicionar o "void". Ainda programo com o Dev-C++...  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Dev-C++ utiliza o gcc para compilar, e nas opções podes definir as flags de compilação (não estou em windows por isso não te posso dizer o sitio exacto, mas se nao encontrares avisa que eu ou alguem te dizemos)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Warrior, sabes se é possível actualizar o GCC para a última versão dentro do Dev-C++ ? É que estou a tentar aprender as normas do C99 e a versão que traz ainda é antiga. Tenho aqui ao lado Linux por isso talvez mais vale seguir por aí. :biggrin:

0

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