Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    4

    newbie question per c/c++

    salve a tutti,

    mi sono iscritto da poco al forum dopo aver per tanto tempo letto semplicemente gli articoli e i post sul forum. Ho iniziato da pochissimo a studiare il java e c (per poi passare il c++). Per testare i programmi uso eclipse (con il modulo c/c++) e mingw (entrambi correttamente configurati).

    La teoria la sto studiando sul libro di kernighan e ritchie..per provare a scrivere il primo programma scrivo
    codice:
    #include <stdio.h>
    main(){
    printf("test");
    }
    e ottengo l'errore..

    warning: return type defaults to 'int' [-Wreturn-type]

    control reaches end of non-void function [-Wreturn-type]
    Ultima modifica di MItaly; 10-11-2013 a 23:43

  2. #2
    Prova con
    int main()

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    4
    grazie della risposta.
    allora ..nella schermata di eclipse mi rimane un triangolo giallo sulla graffa di chiusura del main ottengo sempre un errore..control reaches end of non-void function [-Wreturn-type] ma alla fine il programma viene compilato e avviandolo scrive "test"..sai dirmi come mai ho questo errore?..grazie mille

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,352
    codice:
    int main()
    {
       ...
       return 0;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    4
    ah ok bisogna sempre specificare il return in questo caso stiamo dicendo non voglio ritorno.?..grazie XD scusate la niubbaggine

  6. #6
    Occhio a non fare confusione.

    Se in una funzione che scrivi tu non vuoi restituire nulla, devi mettere `void` come tipo di ritorno; tuttavia, il main standard ritorna necessariamente int, non puoi mettere void; il valore restituito viene fornito al sistema operativo come "codice di uscita" del tuo programma; normalmente 0 significa che è andato tutto bene, comunque è utile sostanzialmente solo se il tuo programma viene chiamato da script o da altri programmi.

    In generale, se ometti il tipo di ritorno (come avevi fatto inizialmente nel tuo codice), la regola (anche se è deprecata) è che il compilatore assume automaticamente che tu intenda "int"; una volta che hai specificato un tipo di ritorno, non puoi omettere il return - o meglio, il compilatore magari compila pure il tuo codice, ma è "undefined behavior" (il programma generato potrebbe non funzionare correttamente) e può segnalarti un warning come nel tuo caso.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    4
    se non ho capito male dire "return 0;" significa non darmi altri tipi di ritorni a parte quelli che ho chiesto ovvero in questo caso la stampa è corretto? volendo fare un parallelo con un linguaggio che conosco un po di più cioè java.quando chiedo si stampare una stringa non è necessario scrivere altro..per questo la cosa mi sembrava "fumosa" e mi sono permesso di postare..

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,567
    return 0; non significa affatto "non voglio un valore di ritorno", ma "restituisci il valore intero 0" il quale in generale viene usato per segnalare che non c'è alcun errore. Ciò è necessario perché per C il prototipo della funzione main è
    codice:
    int main();
    con poi alcuni parametri facoltativi.
    Infatti, facendo una digressione, un prototipo di questo tipo è
    codice:
    tipo funzione();
    dichiara una funzione che ha come tipo di ritorno tipo e come parametri non nessuno, ma un numero variabile. Per dichiarare una funzione che abbia 0 parametri va dichiarata come
    codice:
    tipo funzione(void);
    .
    Infine il C, se non dichiari il tipo di una qualsiasi variabile assume che questo sia int, percui la tua dichiarazione
    codice:
    main() {...}
    è stata interpretata come una funzione che ritorna int e ha un numero variabile di parametri, quindi perfettamente conforme allo standard, tuttavia, appunto, mancava un valore di ritorno.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.