Prima compilazione

di il
15 risposte

Prima compilazione

Ciao a tutti una piccola curisità
sono alle prime armi e ho appena finito di compilare il mio primo progammino se così possiamo chiamarlo

ho usato
lcc-win32 con il seguente codice


#include <stdio.h>

main()

{

printf("cazzo dici\n");

}

fin qui tutto bene

faccio compiler e execute il programma viene eseguito ecco output a video:


15 Risposte

  • Re: Prima compilazione

    Ciao,

    Il motivo della warning è che non hai specificato né il tipo di ritorno, né i parametri per la main...

    Visto che la funzione è sempre quella (MSVC ad esempio accetta anche void main(void), altri non sono così elastici), il compilatore la digerisce senza troppi problemi, ma ti ricorda che per una qualsiasi altra funzione saresti intoppato in un errore, o comunque ti avvisa che stai effettuando un'operazione poco pulita.

    Per default il valore di ritorno di una funzione è int. Se hai una funzione che non restituisce valori è sempre opportuno che il tipo di ritorno sia void... in tal modo se provi ad usarla in un'assegnazione ottieni giustamente un errore.

    Per eliminare la warning, in questo caso, utilizza una:
    void main(void)
    Oppure una tra:
    int main(void)
    int main(int,char**)
    int main(int argc,char** argv)

    Gli ultimi due casi sono il sistema ANSI standard, ma dovrai in ogni caso ritornare un valore al termine (basta un return 0; se poi non ti interessa).

    Ciaociao
  • Re: Prima compilazione

    bottomap ha scritto:


    Ciao,

    Il motivo della warning è che non hai specificato né il tipo di ritorno, né i parametri per la main...

    Visto che la funzione è sempre quella (MSVC ad esempio accetta anche void main(void), altri non sono così elastici), il compilatore la digerisce senza troppi problemi, ma ti ricorda che per una qualsiasi altra funzione saresti intoppato in un errore, o comunque ti avvisa che stai effettuando un'operazione poco pulita.

    Per default il valore di ritorno di una funzione è int. Se hai una funzione che non restituisce valori è sempre opportuno che il tipo di ritorno sia void... in tal modo se provi ad usarla in un'assegnazione ottieni giustamente un errore.

    Per eliminare la warning, in questo caso, utilizza una:
    void main(void)
    Oppure una tra:
    int main(void)
    int main(int,char**)
    int main(int argc,char** argv)

    Gli ultimi due casi sono il sistema ANSI standard, ma dovrai in ogni caso ritornare un valore al termine (basta un return 0; se poi non ti interessa).

    Ciaociao
    Ciao grazie per la risposta sei gentilissimo
    ti posso chiedere se mi rispieghi il concetto in maniera più elementare non per te ma per me che al momento sono assai ignorante in materia ?
    grazie millle
  • Re: Prima compilazione

    Ho provato ad aggiungere

    Per eliminare la warning, in questo caso, utilizza una:
    void main(void)
    Oppure una tra:
    int main(void)
    int main(int,char**)
    int main(int argc,char** argv)

    sia in coda che al posto di main !!!

    ma non va !!!!
  • Re: Prima compilazione

    Ciao,

    In maniera più elementare, ogni funzione deve specificare un tipo di ritorno. Se la funzione non deve ritornare nulla, si può specificare void... in ogni modo è bene sempre specificare qualcosa (altrimenti il compilatore forza un default, in genere int). Specificare il tipo di ritorno rafforza il programma ed evita spiacevoli inconvenienti...

    Quando scrivi una funzione (qualsiasi, anche la main), quindi, è buona norma utilizzare la sintassi:
    <tipo_ritornato> nome_funzione(<eventuali_parametri){
    ... corpo
    }
    Ed è bene invece evitare forme del genere:
    nome_funzione(){
    ... corpo
    }


    Per la main, invece di scrivere
    main(){
    ... corpo ...
    }
    Dovresti utilizzare la sintassi standard:
    int main(int argc, char** argv){
    ... corpo ...
    return 0; //Ritorna un intero, dal momento che non ti interessa, 0 va benissimo
    }

    Alcuni compilatori (non tutti!) per la main gradiscono anche una:
    void main(void){
    ... corpo ...
    }
    Oppure una
    int main(void){
    ... corpo ...
    }
    Che è più semplice da scrivere quando non ci interessano i parametri ed il valore di ritorno.

    Non saprei come essere più elementare...

    Ciaociao
  • Re: Prima compilazione

    Grazie per la spiegazione
    ci studierò sopra

    gentillissimo
  • Re: Prima compilazione

    All'inizio è ostico comprendere i comportamenti dei singoli compilatori ma poi prendi il largo, se dovesse risultare troppo complicato addomesticare LCC-WIN32 segui questo esempio, oppure passa al DevCpp o al MicrosoftVisualC versione express gratuita dal sito ufficiale.

    http://www.diiie.unisa.it/aree/informatica/corsi/Marcelli/fi/lcc/progetto.html

    Ricordati di creare un file progetto e di impostargli "console application", crea un file .c dentro al progetto, scrivici dentro:
    
    #include <stdio.h>
    void main(){
      printf("cazzo dici\n");
    }
    
    Salva, compila, ricordando sempre la "console application", lancia il programma.

    Tienici informati.
  • Re: Prima compilazione

    Ok non mancherò
    probabilmente ho sbagliato qualche passaggio stasera lo rifaccio e poi vi posto il risultato

    grazie
    ragazzi
  • Re: Prima compilazione

    Ciao ho eseguito alla lettera i vostri consigli ecco i contenuti della cartella



    e poi il contenuto del compilato di lcc



    in fine il file compilato



    sempre lo stesso errore !!!!
  • Re: Prima compilazione

    Dacci il contenuto del file .err
  • Re: Prima compilazione

    E assurdo ma e vuoto....
  • Re: Prima compilazione

    Se vi può servire questo e il contenuto del make file
    -----------------------------------------------------------------------------
    # Wedit Makefile for project 1111
    SRCDIR=c:\c++
    CFLAGS= -g2
    CC=$(LCCROOT)\bin\lcc.exe
    LINKER=$(LCCROOT)\bin\lcclnk.exe
    OBJS=\
    1.obj

    LIBS=
    EXE=1111.err.exe

    $(EXE): $(OBJS) Makefile
    $(LINKER) -subsystem console -o $(SRCDIR)\lcc\1111.err.exe $(OBJS) $(LIBS)

    # Build 1.c
    1_C=\

    1.obj: $(1_C) $(SRCDIR)\1.c
    $(CC) -c $(CFLAGS) $(SRCDIR)\1.c

    link:
    $(LINKER) -subsystem console -o $(SRCDIR)\lcc\1111.err.exe $(OBJS) $(LIBS)

    clean:
    del $(OBJS) 1111.err.exe
  • Re: Prima compilazione

    Mi sembra tutto in ordine, qual'è il problema?

    Dal makefile è chiaro che stai cercando di creare 1111.err.exe (riga EXE=), quindi il nome del file prodotto è corretto.
    Il programma mi pare faccia quello che deve (ovvero stampare la frase a schermo).
    I log degli errori è vuoto quindi non hai errori di compilazione o link...
  • Re: Prima compilazione

    Si funziona
    il problema è che io faccio compilare il file 1111
    però lui genera 1111.err

    a video fa quello che deve fare nessun problema
    era solo per capirci meglio !!!!
  • Re: Prima compilazione

    Ahhh! ma allora funziona, cioè se lanci il file exe compare il messaggio in bianco e nero su una console?! Avevo capito che non funzionava l'eseguibile.
Devi accedere o registrarti per scrivere nel forum
15 risposte