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).