Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    int main( void )

    è consuetudine scrivere void se non ci sono parametri, come lo è scrivere return 1; se il programma termina su sistemi *nix e linux per segnalare che il programma è terminato con successo (su windows non so cosa segnala ma dovrebbe essere scritto comunque).
    Non è esattamente così... scrivere void se non ci sono parametri è semplicemente una consuetudine in C++ (e una consuetudine non vista di buon occhio, tra l'altro, visto che è inutile) e in C se si parla di definizioni di funzioni, mentre in C è necessaria nelle dichiarazioni per distinguere le funzioni che non hanno parametri (f(void)) da quelle per cui non sono stati specificati i parametri (f()). In sostanza, se dichiaro una funzione come
    codice:
    void f();
    e sotto la chiamo con
    codice:
    f(5.2);
    il compilatore non batterà ciglio, dato che void f() dichiara una funzione di cui non sono specificati i parametri. Nota che questo genererà undefined behavior se poi al momento della definizione della funzione salterà fuori che f ha dei parametri non corrispondenti a quelli che le sono stati passati, ad esempio:
    codice:
    void f(void) {
        ...
    }
    (su una piattaforma con calling convention a callee-cleanup probabilmente questo scasserà lo stack).

    Se invece il prototipo fosse stato
    codice:
    void f(void);
    la chiamata f(5.2) avrebbe generato un errore di compilazione.

    La questione in generale è abbastanza ingarbugliata e ha a che fare con il C pre-standardizzazione e la relativa sintassi per la dichiarazione delle funzioni, rimando a qui per una trattazione completa.

    Nota comunque che in questo caso specifico questa distinzione non è importante, dato che qui si sta parlando della definizione del main (non della dichiarazione), dove f() e f(void) sono sostanzialmente equivalenti.

    ---

    Sul return code: è esattamente il contrario di come hai detto. La convenzione più o meno universale (non è limitata solo a Linux) per i tool da riga di comando è che restituiscono 0 se tutto va bene, un numero differente in caso contrario. Nota che c'è una "regola magica" valida solo per il main per cui, se il main non restituisce niente, è come se restituisse zero (regola che consiglio di dimenticare, dato che è valida solo per il main ed è comunque buona pratica restituire esplicitamente sempre l'exit code).
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #2
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Non è esattamente così... scrivere void se non ci sono parametri è semplicemente una consuetudine in C++ (e una consuetudine non vista di buon occhio, tra l'altro, visto che è inutile) e in C se si parla di definizioni di funzioni, mentre in C è necessaria nelle dichiarazioni per distinguere le funzioni che non hanno parametri (f(void)) da quelle per cui non sono stati specificati i parametri (f()). In sostanza, se dichiaro una funzione come
    codice:
    void f();
    e sotto la chiamo con
    codice:
    f(5.2);
    il compilatore non batterà ciglio, dato che void f() dichiara una funzione di cui non sono specificati i parametri. Nota che questo genererà undefined behavior se poi al momento della definizione della funzione salterà fuori che f ha dei parametri non corrispondenti a quelli che le sono stati passati, ad esempio:
    codice:
    void f(void) {
        ...
    }
    (su una piattaforma con calling convention a callee-cleanup probabilmente questo scasserà lo stack).

    Se invece il prototipo fosse stato
    codice:
    void f(void);
    la chiamata f(5.2) avrebbe generato un errore di compilazione.

    La questione in generale è abbastanza ingarbugliata e ha a che fare con il C pre-standardizzazione e la relativa sintassi per la dichiarazione delle funzioni, rimando a qui per una trattazione completa.

    Nota comunque che in questo caso specifico questa distinzione non è importante, dato che qui si sta parlando della definizione del main (non della dichiarazione), dove f() e f(void) sono sostanzialmente equivalenti.

    ---

    Sul return code: è esattamente il contrario di come hai detto. La convenzione più o meno universale (non è limitata solo a Linux) per i tool da riga di comando è che restituiscono 0 se tutto va bene, un numero differente in caso contrario. Nota che c'è una "regola magica" valida solo per il main per cui, se il main non restituisce niente, è come se restituisse zero (regola che consiglio di dimenticare, dato che è valida solo per il main ed è comunque buona pratica restituire esplicitamente sempre l'exit code).
    Grazie mille, essendo all'inizio è meglio imparare fin da subito quel che è corretto, altrimenti potrei risentirne più in la.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.