2010-12-10 13 views
4

Quelle est la différence entre la fonction principale C et la fonction principale de Java?C principal vs Java principal

int main(int argc, const char* argv[]) 

vs

public static void main(String [] args) 

Comment ces principales fonctions se rapportent à chaque création de langues et quels sont les avantages ou les résultats de chacun?

+2

Ne comprenez-vous pas ce que l'un (ou les deux) fait? –

+0

Il ne s'agissait pas de ne pas comprendre. C'était «Comment ces fonctions principales se rapportent-elles à la création de chaque langue et quels sont les avantages ou les résultats de chacune? – jarryd

Répondre

7

Le point d'entrée dans C (la fonction principale) est utilisé par le lieur dans une chaîne d'outils de compilation C++ pour s'exécuter lorsque l'exécutable est exécuté lorsqu'une cible exécutable est spécifiée (sinon la fonction est ignorée). Ce point d'entrée fait partie de la spécification exécutable et est assez statique. Il repose sur le fait que le code machine se trouve à une adresse mémoire concrète particulière. En l'imaginant ainsi, nous plaçons le pointeur du tableau args et le compte args sur la pile en mémoire qui est mise en place lorsque l'exécutable s'exécute par le système d'exploitation, puis exécute le code machine. En outre, la fonction C a un type de retour int qui est utilisé pour retourner l'échec ou le succès au shell (généralement EXIT_SUCCESS (généralement 0) ou EXIT_FAILURE). Le point d'entrée dans Java (la méthode principale) est dynamique car Java lui-même est un langage JIT interprété et repose sur la classe avec cette méthode en étant sur le chemin de classe, et spécifié lorsque la commande 'java' est exécutée. Il y a un peu de traitement impliqué dans la recherche où la méthode principale réside dans le bytecode, puis l'exécution du contenu à travers l'interpréteur bytecode. Le tableau args va également sur la pile à utiliser par le corps de la méthode, mais il y a plus de configuration que cela, puisque c'est un objet tableau - nous l'avons converti après kickstarting via JNI ou autre. Java n'a pas de type de retour dans la méthode principale, mais une exception non vérifiée peut être générée pour indiquer un échec (peut-être).

+2

+1 On n'apprécie pas souvent le fait qu'une collection de binaires Java (fichiers de classe, peut-être dans un pot) puisse contenir plusieurs méthodes 'main' et que ce soit seulement l'argument du JavaVM qui lui indique comment trouver le bon. commencer avec. Où en tant que programme C/C++ est un exécutable compilé avec un seul point d'entrée défini et chaque point d'entrée alternatif nécessiterait un nouvel exécutable compilé. –

11

Ils font la même chose - ils sont tous deux destinés à être le point d'entrée dans votre programme. La différence dans les signatures est que Java prend en charge les tableaux qui "connaissent" leur longueur, et pas C. C'est pourquoi vous avez besoin de argc, qui est le nombre d'arguments passés.

En C, vous renvoyez un code de réussite ou d'échec au shell en utilisant le mot-clé return, ainsi qu'une valeur intégrale. En Java, vous le faites en appelant System.Exit (code) avec un code de retour. Deux façons différentes de faire la même chose. Ce type a quite the write-up sur le sujet!