Newsgroup: it.comp.lang.c
Titolo: ambiente integrato di sviluppo in gcc per windows

Salve.
Ho bisogno di un ambiente integrato di sviluppo in C, a mo' di borland
C++ e similari, ma che abbiano come backend il gcc, visto che il
codice lo devo compilare indifferentemente sia sotto linux che sotto
windows (ed ho visto che il borland c non è molto compatibile con il
gcc). In linux ho kdevelop. Cosa c'è in windows (a meno di installare
cygwin+kde)?
Ciao,
Matteo

 cygwin+kde)?
 
http://www.bloodshed.net
Ciao,
Salvatore

 (ed ho visto che il borland c non è molto compatibile con il gcc)
Strano... se ti limiti a rimanere nello standard, senza usare estensioni
particolari al linguaggio o alle librerie non dovresti avere problemi
ciao
Giacomo


beh, mi sembra di vedere che con turbo c++ non viene accettata la
sintassi
int main(){
   int variabile;
   ...
   ...
}
ma solo
int variabile;
int main(){
   ...
   ...
}
che è più corretto, è vero, ma molti programmatori in gcc usano
talvolta la prima sintassi, e non posso obbligare gli altri.
per questo volevo essere sicuro di usare il gcc
Grazie,
Matteo

 }
Impossibile... deve esserci qualche altro errore :O
Di certo accetta entrambe le sintassi (che a dire il vero non sono solo 
due sintassi, sono proprio due cose semanticamente ben diverse :)
Se hai la possibilita', riprova e casomai posta il messaggio di errore 
esatto che ti da (oltre al pezzo di codice naturalmente)
ciao
Giacomo

 due sintassi, sono proprio due cose semanticamente ben diverse :)
mmm,
si, hai ragione.
devo aver sbagliato qualcos'altro. infatti l'ho rifatto e ha
funzionato.
impossibile determinare cosa visto che era un programmino di prova di
4 righe che non ho più.
sta di fatto che in passato ho provato a compilare qualche pezzo di
codice (nemmeno troppo grande) scritto in borland c++ per dos con gcc
e non andava, e viceversa.
a volte erano warning a volte fatal.
comunque la maggior parte dei programmi che ho visto scritti in
borland c++ hanno "void main" visto che, differentemente da linux,
raramente in windows si legge l'exitcode di un programma.
#include <stdio.h>
void main(){
   return;
}
 questo programma compilato con gcc dà warning:
# gcc -o x.c
x.c: In function `main':
x.c:2: warning: return type of 'main' is not `int'
# ./x
# echo $?
2
che non è bello (in condizioni normali un programma deve sempre
restituire 0, altrimenti in alcuni casi può dar fastidio ad alcuni
script)
se per una cosa semplice ci sono warning è molto probabile che con
cose un po' più complesse potrei trovare fatal.
con int main (e return 0;) viene compilato bene invece sia da gcc che
da turbo c++
comunque dev-c++ è quello che cercavo, grazie
solo un difetto (che ha anche turbo c++):
quando eseguo un programma dalla gui mi si apre correttamente la
schermata del dos, ma appena terminato il programma la finestra si
chiude subito senza dare la possibilità di vedere l'output (a meno che
non metto una breakpoint o una pausa alla fine); si può ovviare?
Matteo

cygwin+kde)?
Code::Blocks

	
http://www.bloodshed.net
Nah. Il Dev C++ č meglio evitarlo. Molto migliore Code::Blocks,
ugualmente basato su mingw.

non metto una breakpoint o una pausa alla fine); si può ovviare?
Per ovviare, usa Code::Blocks e risolverai anche un bel po' di
problemi che Dev C++ (il cui sviluppo ti ricordo che è fermo da un bel
po' di anni) ha con gdb.

Matteo Rossini ha scritto:

system("PAUSE");

>che non č bello 
Scusa, ho riletto: con "non č bello" ti riferivi al codice di ritorno
2 a fronte di un codice che non specifica valore di ritorno. E hai
perfettamente ragione. Motivo di piů per avere un tipo di ritorno int
per il main() considerato che per lo standard, anche in mancanza di un
return 0; viene restituito 0 come codice d'uscita.
Scusa per il fraintendimento ;-)


ripeto:
"a meno che non metto una breakpoint o una pausa alla fine"
code::blocks lo fa. apre la console di msdos, esegue, al termine mette
exit code e tempo di esecuzione e un "press any key" senza essere
costretto a metterlo nel programma. questo era quello che mi serviva
Matteo

 Scusa per il fraintendimento ;-)
appunto, e non posso chiedere agli altri di modificare il codice.
o meglio, non posso dirgli "scrivimi un codice con turbo c++ ma
assicurati che sia compilabile con gcc" e viceversa.
ti dò direttamente gcc (code::blocks è ottimo - e non mi ero accorto
che era fermo al 2005 con una beta, tra l'altro)
Matteo

era una ventina di righe scritte a mo' didattico (per insegnare il C)
Hummm... strano. Sarebbe veramente interessate vedere le righe di
codice. E' strano che su un codice così piccolo vengano sollevati
warning con un compilatore ed errori fatali con l'altro. Se hai modo
di reperirlo, pubblicalo!

 di reperirlo, pubblicalo!
potrò reperire il codice a settembre.
spero di ricordarmi
Matteo

> Code::Blocks
Non riesco a far funzionare l'autocompletamento (o almeno, il plugin
c'è ed è attivo, ma non so come si usa)
Qualcuno lo usa?
ho letto che è un po' limitato; è vero?
Matteo



 Code::Blocks 8.02 has been released!
« on: February 28, 2008, 10:28:30 pm »
-- 
http://www.itp-news.com

« on: February 28, 2008, 10:28:30 pm »
Credo si confondesse con Dev (che è effettivamente fermo dal 2005).

 che era fermo al 2005 con una beta, tra l'altro)
Per curiosita': sei un insegnante che sta cercando un tool da dare
ai propri studenti?
Se e' cosi' potrebbe essere istruttivo cominiciare con uno dei due
tool e poi pian piano cominciare a pretendere che scrivano codice
standard che sia portabile tra i vari compilatori. E' un'ottima
preparazione per il mondo del lavoro in cui puo' capitare di
essere costretti a cambiare compilatore e aver saputo scrivere
codice portabile diventa decisamente vitale! :)
Se ho frainteso scusami!
ciao
Giacomo

 Credo si confondesse con Dev (che è effettivamente fermo dal 2005).
esatto

 standard che sia portabile tra i vari compilatori.
ci hai azzeccato.
l'attuale insegnante quest'anno non può tenere il corso, così si
dovrebbe vedere se potessi sostituirlo io, ma credo di non potere
(almeno quest'anno), non sono sufficientemente ferrato da poter
scrivere un percorso (questa estate si trattava di mettermi a studiare
durante le ferie).
l'attuale insegnante ha sviluppato tutto con borland c.
Ma io vengo dal mondo linux, e già alcuni suoi allievi cominciavano a
sviluppare sotto linux (kdevelop è molto buono, tra l'altro), ma non
posso costringere chi non conosce linux ad impararlo per seguire il
corso C (anche se molti allievi del corso C poi seguono il corso linux
e viceversa, ma raramente in contemporanea).
sommando quindi il fatto che borland c è a pagamento e che gli allievi
potrebbero sviluppare su piattaforme OS eterogenee, ho cercato il
miglior punto di unione.
la prima volta che ho scritto codice in C è stato sotto linux con
editor emacs (utilizzato come puro editor, senza funzionalità
specifiche, che non conosco) e successivamente vi (da poco uso vim),
per il corso di Sistemi Operativi all'università.
comunque, continuando a parlare di compilatori, il 'cc' quanto (e in
che) differisce da 'gcc' ?
Matteo

 che) differisce da 'gcc' ?
Il 'cc' è solo un comando che funge da interfaccia verso il sistema di
compilazione installato sulle macchine UNIX. Su AIX ti interfaccia, ad
esempio, al VisualAge C++; sulle macchine Linux normalmente accedi a gcc.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


ehmm, non avevo fatto caso che era un link a gcc, è solo che,
giustamente, lo ritrovavo anche in solaris (e in tutti gli altri)
$ cc --version
cc (GCC) 3.4.6
Matteo


Finalmente ho i listati incriminati.
Ne ho preso qualcuno a caso:
HANOI.C:
// Le torri di Hanoi
#include<stdio.h>
void hanoi (char ,char , char , int);
void main (void)
{
        int n;
        char p='P';
        char i='I';
        char d='D';
        printf("Quanti dischi vuoi inserire?");
        scanf("%d",&n);
        hanoi(p,i,d,n);
        return;
}
void hanoi (char s, char i, char t, int x)
{
        if(x==1)
                printf("Traferisci il disco 1 da %c a %c\n",s,t);
        else
        {
                hanoi(s,t,i,x-1);
                printf("Trasferisci %d da %c a %c\n",x,s,t);
                hanoi(i,s,t,x-1);
        }
}
# gcc HANOI.C
HANOI.C:5: error: '::main' must return 'int'
HANOI.C: In function 'int main()':
HANOI.C:14: error: return-statement with no value, in function
returning 'int'
il primo errore è appunto sul return code (che quì è un fatal e non un
warning). Il codice compila perfettamente in borland c. Correggendo
l'errore compila e funziona (ma mica li posso correggere tutti).
================================================
In un altro codice (gestione di liste):
#include<stdio.h>
...
struct elem
{
        int dato;
        struct elem *next;
};
...
struct elem *p;
p=(struct elem*)malloc(sizeof(struct elem));
...
free(p);
...
ecco gli errori di gcc
LISTE.C:47: error: 'malloc' was not declared in this scope
LISTE.C:62: error: 'free' was not declared in this scope
eppure la stdio.h dovrebbe essere uguale in tutti i compilatori.
===========================================
Per ora mi fermo quì
Matteo

eppure la stdio.h dovrebbe essere uguale in tutti i compilatori.
malloc() e free() hanno i loro prototipi in stdlib.h, non in stdio.h
In quel codice, stdlib.h non è inclusa.

 In quel codice, stdlib.h non è inclusa.
però in borland va

 però in borland va
Include da solo qualcosa? (è solo un'ipotesi)
Enrico



Il Turbo C++ Borland è un compilatore molto più vecchio e molto meno
aderente perfino ai vecchi standard del linguaggio. Come già detto:
devi includere stdlib.h.

Include da solo qualcosa? (è solo un'ipotesi)
No.
Semplicemente non considera obbligatori i prototipi delle funzioni e
quindi pur non trovandone la definizione, si affida alla clemenza del
linker.

 devi includere stdlib.h.
e quindi, come già detto nei primi post, non posso sperare di
compilare codice indifferentemente su linux e su windows, se in
quest'ultimo uso borland c.
e nemmeno chiedere al programmatore di scrivere un codice che riesca a
fare ciò. Quindi l'unica soluzione è costringere ad usare solo gcc
anche su windows. rimane il problema del codice già scritto...
fortunatamente sono tutti programmini didattici (v. hanoi.c), piccoli,
e me li posso tradurre io semplicemente.
Matteo

 e me li posso tradurre io semplicemente.
mi sa che e' l'unica...
Ciao Jack
-- 
Eroi non si nasce, ti incastrano
- Jim Belushi

 anche su windows. rimane il problema del codice già scritto...
No: la soluzione è facile. Basta conoscere il C e scrivere codice
standard. Questo codice gira su tutte le implementazioni che supportano
lo standard. 
Che ormai dovrebbero tendere ad essere tutte. 
-- 
-riko