Stupida sul main

di il
8 risposte

Stupida sul main

Metto questa domanda nella sezione Java, ma andava bene anche in C / C++ o altre...

Dunque, perché il metodo main restituisce void in Java, e int in C / C ++? Se scrivo un programma che mi scrive "Hello World", perché prima è un int e poi un void? Sarebbe come dire che una banana prima è un intero e poi non è nulla....

Inoltre, in Java, se scrivo un programma che mi calcola una somma di interi, non mi deve restituire un intero?

In C / C++, se scrivo un programma che mi restituisce una stringa, non devo mettere Str main ()?

Probabilmente non mi è molto chiaro il significato del dato che restituisce il metodo main.... ed anche come questo dato sia evidentemente cambiato da C / C++ a Java....

8 Risposte

  • Re: Stupida sul main

    Il ritorno del main in C / C++ indica in che modo il programma sia uscito da questo, il ritorno di 0 indica un uscita senza problemi. In java, a causa del multithreading, questo non avviene, soprattutto perché un programma potrebbe uscire dal main essendo ancora in esecuzione. Per restituire un intero come in C si può invocare il metodo System.exit(0);
  • Re: Stupida sul main

    Ni: c/c++ e java seguono due direttive diverse per motivi storici.

    Il main di c/c++ o comunque di qualunque linguaggio nativo (cioe' che viene compilato in codice macchina) segue le direttive di Windows/dos: un'applicazione deve ritornare 0 o un codice di errore.

    In Java, e nei linguaggi che usano una vm, si seguono le specifiche relative a quella vm. Nel caso di Java, il programma deve terminare con un normale return, o mediante un'eccezione. Sara' la vm a convertire la terminazione dell'applicaziond java.exe con 0 o con un codice di errore

    Il multithreading non c'entra, ma se ci entrasse, sarebbe lo stesso sia per Java che per C++: non penserai mica che in C/C++ non si possano scrivere applicazioni multithreading, spero!

    Inoltre anche il main di un'applicazione dipende dalle specifiche della piattaforma:

    per il c/c++ deve essere:


    int main(int argc, char** argv)


    puo' essere anche


    int main()


    ma questo solo per una serie di motivi abbastanza complicati da spiegare in due parole.


    Per Java e' sempre


    static void main(String[] args)


    Qualunque altra signature non puo' essere interpretata come main di un'applicazione Java
  • Re: Stupida sul main

    Java è un linguaggio in cui il multithreading svolge un ruolo fondamentale. C/C++ sono entrambi stati sviluppati in un periodo in cui il multithreading non era usato largamente, è stato introdotto solo in seguito.
  • Re: Stupida sul main

    SamueleCiprietti ha scritto:


    Java è un linguaggio in cui il multithreading svolge un ruolo fondamentale. C/C++ sono entrambi stati sviluppati in un periodo in cui il multithreading non ra usato largamente, è stato introdotto solo in seguito.
    Beata gioventu'!

    Dovresti studiare un po' di piu' la storia dell'informatica!

    I primi sistemi operativi che supportavano il multitasking (piu' processi in esecuzione contemporaneamente) sono degli anni 60.

    E' gia' in questo periodo si faceva programmazione concorrente!

    Il C e' del 1971: nella libreria standard c'e' la funzione fork che non e' altro che una primitiva versione di thread.

    Il C++ e' del 1983

    Java e' del '95

    Domandone di rito:

    1) che intendi con largamente utilizzato?
    2) che intendi per il multithreading e' stato introdotto solo in seguito?
    3) che intendo cin Java è un linguaggio in cui il multithreading svolge un ruolo fondamentale?

    Mi raccomando, attento ai luoghi comuni
  • Re: Stupida sul main

    In effetti Samuele, il multithreading non c'entra nulla ... (e bisognerebbe fare un discorsetto anche sulla differenza tra multitasking e multithreading ...)

    @migliorabile ... ti prego, so che è una battaglia persa ma scriviamo "c'entra" e non "centra" ... vedo che su internet si scambiano facilmente i due verbi ed è una cosa molto fastidiosa ...
  • Re: Stupida sul main

    migliorabile ha scritto:


    SamueleCiprietti ha scritto:


    Java è un linguaggio in cui il multithreading svolge un ruolo fondamentale. C/C++ sono entrambi stati sviluppati in un periodo in cui il multithreading non ra usato largamente, è stato introdotto solo in seguito.
    Beata gioventu'!

    Dovresti studiare un po' di piu' la storia dell'informatica!

    I primi sistemi operativi che supportavano il multitasking (piu' processi in esecuzione contemporaneamente) sono degli anni 60.

    E' gia' in questo periodo si faceva programmazione concorrente!

    Il C e' del 1971: nella libreria standard c'e' la funzione fork che non e' altro che una primitiva versione di thread.

    Il C++ e' del 1983

    Java e' del '95

    Domandone di rito:

    1) che intendi con largamente utilizzato?
    2) che intendi per il multithreading e' stato introdotto solo in seguito?
    3) che intendo cin Java è un linguaggio in cui il multithreading svolge un ruolo fondamentale?

    Mi raccomando, attento ai luoghi comuni
    Multithreading e multitasking è ben diverso. Come hai detto il multitasking permette che siano eseguiti più processi quasi contemporaneamente e un processo è un'istanza di un programma. Cito wikipedia: a process is an instance of a computer program that is being executed.
    Per cui, nel multitasking, non si possono condividere attività della stessa applicazione su più "piani". (Da quel che ho capito)

    Con "è stato introdotto solo in seguito" intendo che occorreva utilizzare librerie esterne alla standard C++ per utilizzare il multithreading. Cito nuovamente wikipedia: Until recently, the C++ standard did not include any specification or built-in support for multi-threading. Therefore, Threading had to be implemented using special threading libraries, which are often platform dependent, as an extension to the C++ standard.

    Comunque la mia osservazione era del tutto personale, se dite che non c'entra il multithreading, mi fido.
  • Re: Stupida sul main

    No ... non c'entra il multithreading.

    Il multithreading non è una caratteristica del linguaggio, né di Java né di C/C++ ma del sistema operativo. Quello che c'è nel linguaggio è il "supporto" al multithreading, che può essere più o meno "avanzato".
  • Re: Stupida sul main

    oregon ha scritto:


    No ... non c'entra il multithreading.

    Il multithreading non è una caratteristica del linguaggio, né di Java né di C/C++ ma del sistema operativo. Quello che c'è nel linguaggio è il "supporto" al multithreading, che può essere più o meno "avanzato".
    Ok. Io mi riferivo a questo, il C++ non includeva alcun supporto al multithreading, compreso nella libreria standard.
Devi accedere o registrarti per scrivere nel forum
8 risposte