Compiladores C

10 respostas
gqferreira

Boa noite galera!
Estou começando a aprender C do zero e estou topando em alguns problemas, não de sintaxe.
Na faculdade os computadores são windows, a ide que usamos é o devc++. Pelo que vi, essa ide usa o compilador MINGW.
Eu levo o meu notebook que roda Ubuntu - Gnome, tenho instalado o monodevelop que é uma ide fantástica. Ela usa os compiladores que estão instalados na maquina, no caso é o conjunto de compiladores GNU (GCC)
O livro que estamos usando tem sintaxe que não roda no compilador da minha máquina mas roda no compilador do devc++, afinal, é o MINGW mesmo?

O professor disse que o compilador do devc++ é o mais comum. Agora vem a pergunta: se esse compilador é mesmo o mais comum, tem para linux?
Obs.: Andei pesquisando e parece que é o GCC o mais comum :? To perdido…

Vlw!

10 Respostas

Rodrigo_Klein

Provavelmente você utilizou alguma função não-portável da linguagem, como por exemplo uma chamada a função System().
Se você colocar o código aqui fica mais fácil de sabermos qual foi o problema.

E sobre as IDE’s: IMO, para quem está aprendendo a programar em C a melhor opção é o Code::Blocks, o Dev-C++ foi abandonado há muito tempo e possui alguns bugs.

gqferreira

Na verdade eu não tenho um código específico pra colocar aqui, teve vários exercicios que não consegui fazer no meu note, tive que usar os pcs da faculdade.
Gostaria de saber qual o compilador mais usado, já que a verificação sintática é diferente, independente da ide e se tem como colocar outros compiladores no linux ao não ser o padrão.
Então se eu fizer um software simples em um sistema operacional, com o mesmo fonte eu não consigo compilar para outro?

gqferreira

Rodrigo Klein:
Provavelmente você utilizou alguma função não-portável da linguagem, como por exemplo uma chamada a função System().
Se você colocar o código aqui fica mais fácil de sabermos qual foi o problema.

É, realmente a função System() dá problema por se interagir com o so

Andre_Rosa

Nossa, esqueça esse DevC++, é uma péssima IDE. Quando for praticar em casa, tanto no Linux quanto no Windows, use o Code::Blocks. MingW melhor que o Gcc? O mingW é uma espécie de Gcc para Windows. Tanto que se não me engano, no diretório do DevC++ você deve achar um executável do Gcc, para usar por linha de comando. Quanto à algumas funções não funcionarem, você está usando a conio.h com alguma função dela, como a getch(), por exemplo? No caso do system(), dependendo da situação, você pode fazer uma coisa não tão bonita, que é usar uma macro para saber em qual plataforma você está. Por exemplo:

int main() { #ifdef LINUX //código especifico para Linux system("clear"); #elif defined WIN32 //código específico para Windows system("cls"); #else #error Plataforma não suportada return 1; #endif }

Agora se você quer algo mais profissional, procure por building system.

gqferreira

Se o MingW é um compilador baseado no gcc só que para windows, pq a sintaxe é diferente? O meu principal problema: Como desenvolver codigo usando o meu notebook e conseguir usar o mesmo codigo pra compilar no windows.
Obrigado pela paciencia.

Andre_Rosa

gqferreira:
Se o MingW é um compilador baseado no gcc só que para windows, pq a sintaxe é diferente? O meu principal problema: Como desenvolver codigo usando o meu notebook e conseguir usar o mesmo codigo pra compilar no windows.
Obrigado pela paciencia.

Não, a sintaxe não é diferente. É que algumas bibliotecas são específicas para um determinado sistema operacional, como a API do Windows, por exemplo. E o código das bibliotecas veem pronto de acordo com as plataformas. A stdio.h, por exemplo, vem de uma forma para os sistemas da Microsoft e vem de outra forma para os sistemas UNIX e UNIX-like.

E que código seria esse? Poderia posta-lo?

gqferreira

Eu não tenho um código aqui agora, tivemos duas aulas de C só até agora. A função getch() da conio.h não tem e no windows tenho que colocar o protótipo das funções no inicio da “classe”, isso também não funciona no linux.
Então, a questão da biblioteca eu entendi o motivo, mas e a questão do protótipo?
Exemplo:

#include <stdio.h>

void imprimeOla(); //protótipo da função, no devc++ é obrigatório, no gcc nem posso colocar...

int main(){
    imprimeOla();
    return 0;
}

void imprimeOla(){
    printf("Olá");
}

EDIT: no devc++ eu tenho que colocar algo pra parar e pedir que usuario pressione algo (aplicação console), no gcc eu não preciso.

Andre_Rosa

gqferreira:
Eu não tenho um código aqui agora, tivemos duas aulas de C só até agora. A função getch() da conio.h não tem e no windows tenho que colocar o protótipo das funções no inicio da “classe”, isso também não funciona no linux.
Então, a questão da biblioteca eu entendi o motivo, mas e a questão do protótipo?

Então, no caso da conio, não é recomendado nem no Windows, pois é uma biblioteca desatualizada da Borland, não vale a pena usar. Quanto ao protótipo das funções, não é obrigatório declarar todos os protótipos em C, mas é bom, até porque alguns compiladores não deixam passar, como no seu caso. Mas é bor ir se acostumando a declarar protótipos, até porque, em C++ declaração de protótipos é uma coisa obrigatória.

Não entendi. Você se refere à alguma coisa para pausar a execução, como a getch(), da conio, ou a getchar(), da biblioteca padrão de E/S ?

J

O MinGW é “Minimalist GNU Windows”. Ele é o gcc para windows.
A conio.h é uma biblioteca de formatação de output desenvolvida pela borland, para o turboc e turbo pascal. Ela só estará presente nestes compiladores. Existia um port para o gcc a muito tempo atraz.

Quanto ao DevC++ ou Codeblocks, se a questão é desenvolver programas em c, use o vim. É a ferramenta mais completa para escrever código c .

ViniGodoy

Estranho você não conseguir colocar o protótipo das suas funções no início. Isso aí é C padrão. Certifique-se que você baixou a última versão do Code::Blocks para Windows e Linux, e que o seu compilador MinGW também está atualizado (preferencialmente na mesma versão) em ambas as plataformas. Muitas vezes você acaba com uma versão antiga do compilador em uma delas, e isso gera alguns probleminhas. Também certifique-se que o nome dos seus arquivos tem a extensão .c e não .cpp.

Se ainda der erro, poste a mensagem de erro aqui, para eliminarmos a chance de não ser algum outro detalhe que passou batido.

A conio.h é uma biblioteca que originou-se da Borland. Ela não é parte do C++ oficial e, na verdade, nem sequer usa funções padrão do C++. Se quiser um sistema portável não use a conio.h.

Concordo ali com o JuniorLinux, não use o DevCpp. Além de uma péssima IDE ela tem alguns erros que, no mínimo, atrapalham muito à vida. Um deles é o fato dela omitir parte das mensagens de erro. Além disso, ele vem com uma versão pré-histórica do MinGW. Parte da culpa dela ser popular é justamente a existência de professores desatualizados como o seu. Converse com ele e mostre à ele o Code::Blocks.

Também já ouvi falar muito bem do desenvolvimento C multiplataforma com o Netbeans. Sei que o Eclipse também tem plugin, mas quase nunca ouvi comentários e nem desenvolvi utilizando. Agora, tipicamente o Netbeans usa outro compilador, então, se seu professor está usando o GNU, seria melhor usar uma IDE que também usasse o GNU.

Criado 26 de fevereiro de 2011
Ultima resposta 28 de fev. de 2011
Respostas 10
Participantes 5