En la programación de computadoras , un punto de entrada es un punto en un programa donde comienza la ejecución de un programa y donde el programa tiene acceso a los argumentos de la línea de comandos. [1]
Para iniciar la ejecución de un programa , el cargador o sistema operativo pasa el control a su punto de entrada. (Durante el arranque , el propio sistema operativo es el programa). Esto marca la transición del tiempo de carga (y el tiempo de enlace dinámico , si está presente) al tiempo de ejecución .
Para algunos sistemas operativos y lenguajes de programación , el punto de entrada está en una biblioteca en tiempo de ejecución , un conjunto de funciones de soporte para el lenguaje. El código de la biblioteca inicializa el programa y luego pasa el control al programa propiamente dicho. En otros casos, el programa puede inicializar la propia biblioteca en tiempo de ejecución. [2]
En sistemas simples, la ejecución comienza en la primera instrucción, que es común en lenguajes interpretados , formatos ejecutables simples y cargadores de arranque . En otros casos, el punto de entrada está en alguna otra dirección de memoria conocida que puede ser una dirección absoluta o una dirección relativa ( desplazamiento ).
Alternativamente, la ejecución de un programa puede comenzar en un punto con nombre, ya sea con un nombre convencional definido por el lenguaje de programación o el sistema operativo o en un nombre especificado por el llamador. En muchos lenguajes de la familia C , esta es una función denominada main
; como resultado, el punto de entrada a menudo se conoce como función principal . [3]
En lenguajes JVM como Java, el punto de entrada es un método estático llamado main
; en lenguajes CLI como C #, el punto de entrada es un método estático llamado Main
. [4]
Uso
Los puntos de entrada se aplican tanto al código fuente como a los archivos ejecutables . Sin embargo, en el desarrollo de software del día a día , los programadores especifican los puntos de entrada solo en el código fuente, lo que los hace mucho más conocidos. Los puntos de entrada en los archivos ejecutables dependen de la interfaz binaria de la aplicación (ABI) del sistema operativo real y son generados por el compilador o enlazador (si no los fija la ABI). Otros archivos de objetos vinculados también pueden tener puntos de entrada, que el vinculador utiliza más adelante al generar puntos de entrada de un archivo ejecutable.
Los puntos de entrada son capaces de transmitir argumentos de comando, variables u otra información como una variable local utilizada por el Main()
método. De esta manera, se pueden establecer opciones específicas al ejecutar el programa y luego interpretarlas el programa. Muchos programas usan esto como una forma alternativa de configurar diferentes configuraciones o realizar una variedad de acciones usando un solo programa.
Contemporáneo
En la mayoría de los lenguajes de programación y sistemas operativos más populares de la actualidad, un programa de computadora generalmente solo tiene un único punto de entrada .
En los programas C , C ++ , D , Zig , Rust y Kotlin , esta es una función llamada main
; en Java es un método estático llamado main
(aunque la clase debe especificarse en el momento de la invocación), y en C # es un método estático llamado Main
. [5] [6]
En muchos de los principales sistemas operativos, el formato ejecutable estándar tiene un único punto de entrada. En el formato ejecutable y enlazable (ELF), utilizado en Unix y sistemas similares a Unix como Linux , el punto de entrada se especifica en el e_entry
campo del encabezado ELF. En GNU Compiler Collection (gcc), el punto de entrada utilizado por el enlazador es el _start
símbolo. De manera similar, en el formato ejecutable portátil , utilizado en Microsoft Windows , el punto de entrada lo especifica el AddressOfEntryPoint
campo, que se hereda de COFF . En archivos COM , el punto de entrada está en el desplazamiento fijo de 0100 h.
Una excepción al paradigma del punto de entrada único es Android . Las aplicaciones de Android no tienen un único punto de entrada, no hay ninguna main
función especial . En cambio, tienen componentes esenciales (actividades y servicios) que el sistema puede cargar y ejecutar según sea necesario. [7]
Una técnica que se usa ocasionalmente es el binario gordo , que consta de varios ejecutables para diferentes objetivos empaquetados en un solo archivo. Por lo general, esto se implementa mediante un único punto de entrada general, que es compatible con todos los objetivos y se ramifica al punto de entrada específico del objetivo. Las técnicas alternativas incluyen almacenar ejecutables separados en bifurcaciones separadas , cada una con su propio punto de entrada, que luego es seleccionado por el sistema operativo.
Histórico
Históricamente, y en algunos sistemas heredados contemporáneos , como VMS y OS / 400 , los programas de computadora tienen una multitud de puntos de entrada , cada uno correspondiente a las diferentes funcionalidades del programa. La forma habitual de indicar los puntos de entrada, como se usa en todo el sistema en VMS y en los programas PL / I y MACRO , es agregarlos al final del nombre de la imagen ejecutable , delimitada por un signo de dólar ($), por ejemplo directory.exe$make
.
La computadora Apple I también usó esto hasta cierto punto. Por ejemplo, un punto de entrada alternativo en el BASIC de Apple I mantendría útil el programa BASIC cuando el botón de reinicio se presionara accidentalmente. [ aclaración necesaria ]
Punto de salida
En general, los programas pueden salir en cualquier momento volviendo al sistema operativo o fallando . Los programas en lenguajes interpretados devuelven el control al intérprete, pero los programas en lenguajes compilados deben volver al sistema operativo; de lo contrario, el procesador simplemente continuará ejecutándose más allá del final del programa, lo que dará como resultado un comportamiento indefinido .
Por lo general, no hay un solo punto de salida especificado en un programa. Sin embargo, en otros casos, los tiempos de ejecución aseguran que los programas siempre terminen de forma estructurada a través de un único punto de salida, lo cual está garantizado a menos que el tiempo de ejecución se bloquee; esto permite que se ejecute código de limpieza, como atexit
controladores. Esto se puede hacer requiriendo que los programas terminen volviendo de la función principal, llamando a una función de salida específica, o mediante la captura de excepciones o señales del sistema operativo en tiempo de ejecución.
Lenguajes de programación
En muchos lenguajes de programación, la main
función es donde un programa comienza su ejecución. Permite la organización de alto nivel de la funcionalidad del programa y, por lo general, tiene acceso a los argumentos de comando que se le dieron al programa cuando se ejecutó.
La función principal es generalmente la primera función escrita por el programador que se ejecuta cuando se inicia un programa y se invoca directamente desde la inicialización específica del sistema contenida en el entorno de ejecución ( crt0 o equivalente). Sin embargo, algunos lenguajes pueden ejecutar funciones escritas por el usuario antes de las ejecuciones principales, como los constructores de objetos globales de C ++ .
En otros lenguajes, notablemente muchos lenguajes interpretados , la ejecución comienza en la primera instrucción del programa.
A continuación, se incluye una lista no exhaustiva de lenguajes de programación, que describe su forma de definir el punto de entrada principal:
APL
En APL , cuando se carga un espacio de trabajo, el contenido de la variable "quad LX" (expresión latente) se interpreta como una expresión APL y se ejecuta.
C y C ++
En C y C ++ , el prototipo de función de la función principal se parece a uno de los siguientes:
int main ( vacío ); int main ();int main ( int argc , char ** argv ); int main ( int argc , char * argv []); int main ( int argc , char ** argv , char ** env );// más específicamente en C // NO según el estándar ISO C 5.1.2.2.1 // PERO en programación embebida dependiendo del µC, esta forma también se usa void main ( void );
La función principal parece un punto de entrada para los programadores de aplicaciones (el punto de entrada de la aplicación o el punto de entrada principal). La programación del sistema revela más información sobre el programa y especifica el punto de entrada en otro lugar (en el procedimiento de inicialización o en el vector de interrupción de reinicio para programas independientes).
Los parámetros argc
, el número de argumentos , y argv
, argumento vector , [8] dan, respectivamente, el número y los valores de del programa argumentos de línea de comandos . Los nombres de argc
y argv
pueden ser cualquier identificador válido en C, pero es una convención común usar estos nombres. En C ++, los nombres deben tomarse literalmente y el "vacío" en la lista de parámetros debe omitirse, si se desea una conformidad estricta. [9] Los estándares C y C ++ también permiten otros formatos dependientes de la plataforma, excepto que en C ++ el tipo de retorno siempre debe ser int
; [10] por ejemplo, Unix (aunque no POSIX.1 ) y Windows tienen un tercer argumento que da el entorno del programa , de lo contrario accesible a través getenv
de stdlib.h
:
int main ( int argc , char ** argv , char ** envp );
Los sistemas operativos basados en Darwin , como macOS , tienen un cuarto parámetro que contiene información arbitraria proporcionada por el sistema operativo, como la ruta al binario en ejecución: [11]
int main ( int argc , char ** argv , char ** envp , char ** apple );
El valor devuelto por la función principal se convierte en el estado de salida del proceso, aunque el estándar C solo asigna un significado específico a dos valores: EXIT_SUCCESS
(tradicionalmente 0) y EXIT_FAILURE
. El significado de otros posibles valores devueltos está definido por la implementación. En caso de que el programador no defina un valor de retorno, el compilador inserta un valor implícito return 0;
al final de la main()
función; este comportamiento es requerido por el estándar C ++.
Se garantiza que argc
no es negativo y que argv[argc]
es un puntero nulo . Por convención, los argumentos de la línea de comandos especificados por argc
e argv
incluyen el nombre del programa como primer elemento si argc
es mayor que 0; si un usuario escribe un comando de " rm file
", el shell inicializará el rm
proceso con argc = 2
y argv = {"rm", "file", NULL}
. Como argv[0]
es el nombre bajo el que aparecen los procesos en ps
, top
etc., algunos programas, como los demonios o los que se ejecutan dentro de un intérprete o máquina virtual (donde argv[0]
estaría el nombre del ejecutable del host), pueden optar por alterar su argv para dar un aspecto más descriptivo argv[0]
, generalmente mediante la exec
llamada al sistema.
La main()
función es especial; normalmente, cada programa C y C ++ debe definirlo exactamente una vez.
Si se declara, main()
debe declararse como si tuviera vinculación externa; no se puede declarar static
o inline
.
En C ++, main()
debe estar en el espacio de nombres global (es decir ::main
), no se puede sobrecargar y no puede ser una función miembro , aunque el nombre no está reservado de otro modo, y se puede utilizar para funciones miembro, clases, enumeraciones o funciones no miembro en otros espacios de nombres. En C ++ (a diferencia de C) main()
no se puede llamar de forma recursiva y no se puede tomar su dirección.
C#
Al ejecutar un programa escrito en C # , CLR busca un método estático marcado con la .entrypoint
directiva IL, que no toma argumentos o un solo argumento de tipo string[]
, y tiene un tipo de retorno de void
o int
, y lo ejecuta. [12]
vacío estático Main (); static void Main ( cadena [] argumentos ); static int Main (); static int Main ( cadena [] argumentos );
Los argumentos de la línea de comandos se pasan args
, de forma similar a como se hace en Java. Para las versiones de Main()
devolución de un número entero, similar a C y C ++, se devuelve al entorno como el estado de salida del proceso.
Desde C # 7.1 hay cuatro firmas más posibles del punto de entrada, que permiten la ejecución asincrónica en el Main()
método. [13]
static Task Main () static Task < int > Main () static Task Main ( string []) static Task < int > Main ( string [])
Los tipos Task
y Task
son los equivalentes asincrónicos de void
y int
.
Limpio
Clean es un lenguaje de programación funcional basado en la reescritura de gráficos. El nodo inicial se nombra Start
y es de tipo *World -> *World
si cambia el mundo o algún tipo fijo si el programa solo imprime el resultado después de reducir Start
.
Inicio :: * Mundo -> * Mundo Start world = startIO ...
O incluso más simple
Inicio :: Cadena Inicio = "¡Hola, mundo!"
Uno le dice al compilador qué opción usar para generar el archivo ejecutable.
Lisp común
ANSI Common Lisp no define una función principal; en su lugar, el código se lee y evalúa de arriba a abajo en un archivo fuente. Sin embargo, el siguiente código emulará una función principal.
( defun hello-main () ( formato t "¡Hola mundo! ~%" ))( hola-principal )
D
En D , el prototipo de función de la función principal se parece a uno de los siguientes:
void main (); void main ( cadena [] argumentos ); int main (); int main ( string [] args );
Los argumentos de la línea de comandos se pasan args
, de forma similar a como se hace en C # o Java. Para las versiones de main()
devolución de un número entero, similar a C y C ++, se devuelve al entorno como el estado de salida del proceso.
FORTRAN
FORTRAN no tiene una subrutina o función principal. En su lugar, PROGRAM
se puede utilizar una declaración como primera línea para especificar que una unidad de programa es un programa principal, como se muestra a continuación. La PROGRAM
declaración no se puede utilizar para llamadas recursivas. [14]
PROGRAMA HELLO PRINT * , "¡Cint!" FIN DEL PROGRAMA HOLA
Algunas versiones de Fortran, como las de IBM System / 360 y mainframes sucesores, no admiten la instrucción PROGRAM. Muchos compiladores de otros fabricantes de software permitirán compilar un programa fortran sin una declaración PROGRAM. En estos casos, cualquier módulo que tenga una declaración sin comentario donde no ocurra ninguna instrucción SUBROUTINE, FUNCTION o BLOCK DATA, se considera el programa principal.
MOSQUITO
Usando GNAT , no se requiere que el programador escriba una función nombrada main
; un archivo fuente que contiene un solo subprograma se puede compilar en un ejecutable. Sin embargo, el archivador creará un paquete ada_main
, que contendrá y exportará una función principal de estilo C.
Ir
En el lenguaje de programación Go , la ejecución del programa comienza con la main
función delpackage main
paquete principalimportar "fmt"func main () { fmt . Println ( "¡Hola, mundo!" ) }
No hay forma de acceder a argumentos o un código de retorno fuera de la biblioteca estándar en Go. Se puede acceder a ellos a través de os.Args
y os.Exit
respectivamente, ambos incluidos en el "os"
paquete.
Haskell
Un programa Haskell debe contener un nombre main
vinculado a un valor de tipo IO t
, para algún tipo t
; [15] que suele ser IO ()
. IO
es una mónada , que organiza los efectos secundarios en términos de código puramente funcional . [16] El main
valor representa el cálculo de efectos secundarios realizado por el programa. El resultado del cálculo representado por main
se descarta; por eso main
suele tener tipo IO ()
, que indica que el tipo del resultado del cálculo es ()
, el tipo de unidad , que no contiene información.
main :: IO () main = putStrLn "¡Hola, mundo!"
No se dan argumentos de línea de comando main
; deben recuperarse mediante otra acción de E / S, como System.Environment.getArgs
.
Java
Los programas Java comienzan a ejecutarse en el método principal de una clase, [17] [18] [19] [20] que tiene uno de los siguientes encabezados de método :
public static void main ( String [] args ) public static void main ( String ... args ) public static void main ( String args [] )
Los argumentos de la línea de comandos se pasan args
. Como en C y C ++, el nombre " main()
" es especial. Los métodos principales de Java no devuelven un valor directamente, pero se puede pasar uno utilizando el System.exit()
método.
A diferencia de C, el nombre del programa no está incluido args
, porque es el nombre de la clase que contiene el método principal, por lo que ya se conoce. Además, a diferencia de C, no es necesario incluir el número de argumentos, ya que las matrices en Java tienen un campo que realiza un seguimiento de cuántos elementos hay.
La función principal debe incluirse dentro de una clase. Esto se debe a que en Java todo debe estar contenido dentro de una clase. Por ejemplo, un programa de hola mundo en Java puede verse así:
public class HelloWorld { public static void main ( String [] args ) { System . fuera . println ( "¡Hola, mundo!" ); } }
Para ejecutar este programa, se debe llamar java HelloWorld
al directorio donde existe el archivo de clase compilado HelloWorld.class
). Alternativamente, los archivos JAR ejecutables usan un archivo de manifiesto para especificar el punto de entrada de una manera que es independiente del sistema de archivos desde la perspectiva del usuario.
LOGO
En FMSLogo , los procedimientos cuando se cargan no se ejecutan. Para que se ejecuten es necesario utilizar este código:
para procname ...; Comandos de inicio (como imprimir [Bienvenido])final
hacer "inicio [procname]
La variable startup
se usa para la lista de acciones de inicio, pero la convención es que esto llama a otro procedimiento que ejecuta las acciones. Ese procedimiento puede tener cualquier nombre.
OCaml
OCaml no tiene ninguna main
función. Los programas se evalúan de arriba a abajo.
Los argumentos de la línea de comandos están disponibles en una matriz con nombre Sys.argv
y el estado de salida es 0 de forma predeterminada.
Ejemplo:
print_endline "Hola mundo"
Pascal
En Pascal , el procedimiento principal es el único bloque sin nombre del programa. Debido a que los programas Pascal definen procedimientos y funciones en un orden ascendente más riguroso que los programas C, C ++ o Java, el procedimiento principal suele ser el último bloque del programa. Pascal no tiene un significado especial para el nombre " main
" o cualquier nombre similar.
programa Hola ( Salida ) ; begin Writeln ( '¡Hola, mundo!' ) ; final .
Los argumentos de la línea de comandos se cuentan ParamCount
y son accesibles como cadenas por ParamStr(n)
, con n entre 0 y ParamCount
.
Las versiones de Pascal que admiten unidades o módulos también pueden contener un bloque sin nombre en cada una, que se utiliza para inicializar el módulo. Estos bloques se ejecutan antes de que se llame al punto de entrada del programa principal.
Perl
En Perl , no hay una función principal. Las declaraciones se ejecutan de arriba a abajo.
Los argumentos de la línea de comandos están disponibles en la matriz especial @ARGV
. A diferencia de C, @ARGV
no contiene el nombre del programa, que es $0
.
PHP
PHP no tiene una función "principal". A partir de la primera línea de un script PHP, cualquier código no encapsulado por un encabezado de función se ejecuta tan pronto como se ve.
Lucio
En Pike, la sintaxis es similar a la de C y C ++. La ejecución comienza a las main
. La argc
variable " " mantiene el número de argumentos pasados al programa. La argv
variable " " contiene el valor asociado con los argumentos pasados al programa.
Ejemplo:
int main ( int argc , matriz ( cadena ) argv )
Pitón
Los programas de Python se evalúan de arriba a abajo, como es habitual en los lenguajes de scripting: el punto de entrada es el comienzo del código fuente. Dado que las definiciones deben preceder al uso, los programas suelen estar estructurados con definiciones en la parte superior y el código a ejecutar en la parte inferior (sin sangría), similar al código de un compilador de una sola pasada , como en Pascal.
Alternativamente, un programa se puede estructurar con una main
función explícita que contiene el código que se ejecutará cuando un programa se ejecuta directamente, pero que también se puede invocar importando el programa como un módulo y llamando a la función. Esto se puede hacer con el siguiente idioma, que se basa en que la variable interna __name__
se establece __main__
cuando se ejecuta un programa, pero no cuando se importa como un módulo (en cuyo caso, en cambio, se establece en el nombre del módulo); hay muchas variantes de esta estructura: [21] [22] [23]
importar sysdef main ( argv ): n = int ( argv [ 1 ]) print ( n + 1 )if __name__ == '__main__' : sys . salir ( principal ( sys . argv ))
En este idioma, la llamada al punto de entrada nombrado main
es explícita, y la interacción con el sistema operativo (recibir los argumentos, llamar a la salida del sistema) se realiza explícitamente mediante llamadas a la biblioteca, que en última instancia son manejadas por el tiempo de ejecución de Python. Esto contrasta con C, donde estos se hacen implícitamente por el tiempo de ejecución, según la convención.
QB64
El lenguaje QB64 no tiene una función principal, el código que no está dentro de una función o subrutina se ejecuta primero, de arriba a abajo:
imprimir "¡Hola mundo! a =" ; a = getInteger ( 1.8 d ): imprime unfunction getInteger ( n como doble ) getInteger = int ( n ) end function
Los argumentos de la línea de comando (si los hay) se pueden leer usando la función COMMAND $:
dim línea de comando compartida como cadena línea de comando = COMANDO $ 'Se pueden leer varios argumentos de línea de comando separados por espacios usando COMMAND $ (n) commandline1 = COMMAND $ ( 2 )
Rubí
En Ruby , no hay una función principal distinta. Fuera de lugar, el código escrito de cualquier class .. end
o module .. end
ámbito de aplicación se ejecuta en el contexto de un especial " main
" objeto. Se puede acceder a este objeto mediante self
:
irb (principal): 001: 0> self => principal
Tiene las siguientes propiedades:
irb (principal): 002: 0> self . clase => Objeto irb (principal): 003: 0> self . clase . ancestros => [Objeto, Kernel, BasicObject]
Los métodos definidos fuera de un ámbito class
o module
se definen como métodos privados del main
objeto " ". Dado que la clase de " main
" es Object
, tales métodos se convierten en métodos privados de casi todos los objetos:
irb (principal): 004: 0> def foo irb (principal): 005: 1> 42 irb (principal): 006: 1> end => nil irb (principal): 007: 0> foo => 42 irb (principal ): 008: 0> []. foo NoMethodError: método privado `foo 'llamado para []: Array from (irb): 8 from / usr / bin / irb: 12: in` ' irb (main): 009: 0> false . foo NoMethodError: método privado `foo 'llamado falso: FalseClass de (irb): 9 de / usr / bin / irb: 12: en` '
El número y los valores de los argumentos de la línea de comandos se pueden determinar mediante la ARGV
matriz constante:
$ irb / dev / tty foo bartty (principal): 001: 0> ARGV ARGV => ["foo", "bar"] tty (principal): 002: 0> ARGV.size ARGV.size => 2
El primer elemento de ARGV
, ARGV[0]
contiene el primer argumento de la línea de comandos, no el nombre del programa ejecutado, como en C. El nombre del programa está disponible usando $0
o $PROGRAM_NAME
. [24]
Similar a Python, uno podría usar:
if __FILE__ == $ PROGRAM_NAME # Ponga el código "principal" aquí al final
para ejecutar algún código solo si su archivo se especificó en la ruby
invocación.
Oxido
En Rust, el punto de entrada de un programa es una función nombrada main
. Normalmente, esta función se encuentra en un archivo llamado main.rs
o lib.rs
.
// En `main.rs` fn main () { println! ( "¡Hola, mundo!" );}
Además, a partir de Rust 1.26.0, la función principal puede devolver un Result
: [25]
fn main () -> Resultado < (), std :: io :: Error > { println! ( "¡Hola, mundo!" ); Ok (()) // Devuelve un tipo `Resultado` de valor` Ok` con el contenido `()`, es decir, una tupla vacía. }
Rápido
Cuando se ejecuta en un Xcode Playground, [26] Swift se comporta como un lenguaje de scripting, ejecutando declaraciones de arriba a abajo; Se permite el código de nivel superior.
// HelloWorld.playgrounddejar hola = "hola" dejar mundo = "mundo"let helloWorld = hola + "" + mundoimprimir ( helloWorld ) // hola mundo
Las aplicaciones basadas en Cocoa y Cocoa Touch escritas en Swift generalmente se inicializan con los atributos @NSApplicationMain
y @UIApplicationMain
, respectivamente. Esos atributos son equivalentes en su propósito al main.m
archivo en los proyectos de Objective-C : declaran implícitamente la main
función que llama a UIApplicationMain(_:_:_:_:)
[27] que crea una instancia de UIApplication
. [28] El siguiente código es la forma predeterminada de inicializar una aplicación iOS basada en Cocoa Touch y declarar su aplicación delegada.
// AppDelegate.swiftimportar UIKit@UIApplicationMain clase AppDelegate : UIResponder , UIApplicationDelegate { ventana var : UIWindow ? func application ( _ application : UIApplication , didFinishLaunchingWithOptions launchOptions : [ UIApplication . LaunchOptionsKey : Any ]?) -> Bool { return true } }
Visual Basic
En Visual Basic , cuando un proyecto no contiene formularios, el objeto de inicio puede ser el Main()
procedimiento. La Command$
función se puede usar opcionalmente para acceder a la parte del argumento de la línea de comando utilizada para iniciar el programa:
Sub Main () Depuración . Imprimir "¡Hola mundo!" MsgBox "Argumentos si los hay:" & Command $ End Sub
Xojo
En Xojo , hay dos tipos de proyectos diferentes, cada uno con un punto de entrada principal diferente. Las aplicaciones de escritorio (GUI) comienzan con el App.Open
evento del Application
objeto del proyecto . Las aplicaciones de consola comienzan con el App.Run
evento del ConsoleApplication
objeto del proyecto . En ambos casos, la función principal se genera automáticamente y no se puede eliminar del proyecto.
Ver también
- crt0 , un conjunto de rutinas de inicio de ejecución vinculadas a un programa en C
- Sistema de tiempo de ejecución
Referencias
- ^ "En informática, ¿qué es un punto de entrada? (Con imagen)" . WiseGEEK . Consultado el 22 de enero de 2020 .
- ^ Decker, Karsten M .; Rehmann, René M. (1994). Entornos de programación para sistemas distribuidos masivamente paralelos: Conferencia de trabajo del Ifip Wg 10.3, 25-29 de abril de 1994 . Springer Science & Business Media. ISBN 978-3-7643-5090-1.
- ^ "Método principal en C #" . GeeksforGeeks . 2018-11-30 . Consultado el 22 de enero de 2020 .
- ^ Wagner, Bill (1 de agosto de 2017). "Main () / Entry Points (C # Programming Guide) - Microsoft Developer Network" . docs.microsoft.com . Consultado el 3 de diciembre de 2018 .
- ^ "La función principal ()" . ibm.com . IBM . Consultado el 8 de mayo de 2014 .
- ^ "Main () y Argumentos de la línea de comandos (Guía de programación de C #)" . Msdn.microsoft.com . Consultado el 8 de mayo de 2014 .
- ^ "Fundamentos de la aplicación" . Desarrollo de Android . linuxtopia.org . Consultado el 19 de febrero de 2014 .
- ^ argv: el término vectorial en el nombre de esta variable se usa en el sentido tradicional para referirse a cadenas.
- ^ Tipos de parámetros y nombres de los principales
- ^ Sección 3.6.1.2, edición estándar de C ++ 2011.
- ^ "El char *applevector de argumento" . Archivado desde el original el 22 de diciembre de 2015 . Consultado el 12 de mayo de 2014 .
- ^ "Aplicaciones de consola en .NET, o enseñarle viejos trucos a un perro nuevo" . Msdn.microsoft.com. 2003-06-12. Archivado desde el original el 4 de febrero de 2008 . Consultado el 19 de agosto de 2013 .
- ^ "El repositorio oficial para el diseño del lenguaje de programación C #: Dotnet / Csharplang" . 2019-08-26.
- ^ XL FORTRAN para AIX . Referencia idiomática. Tercera edición, 1994. IBM
- ^ "El informe Haskell 98: módulos" . Haskell.org . Consultado el 19 de agosto de 2013 .
- ^ Algunos conceptos erróneos de Haskell: código idiomático, pureza, pereza e IO - sobre el IO monádico de Haskell>
- ^ "El entorno del lenguaje Java" . Oracle . Consultado el 14 de marzo de 2020 .
Dentro de la clase HelloWorld, declaramos un solo método llamado main () que a su vez contiene una única invocación de método para mostrar la cadena "¡Hola mundo!" en la salida estándar. La declaración que imprime "¡Hola mundo!" lo hace invocando el método println del objeto out. El objeto out es una variable de clase en la clase System que realiza operaciones de salida en archivos.
- ^ Schildt, Herbert (2019). Java: una guía para principiantes . Nueva York: McGraw-Hill Education. pag. 46. ISBN 978-1-260-44022-5. OCLC 1061561931 .
// Un programa JAVA comienza con una llamada a main ().
- ^ "¡Hola, mundo! - Tutorial interactivo gratuito de Java" . Aprenda Java . Consultado el 14 de marzo de 2020 .
En Java, cada línea de código que realmente se puede ejecutar debe estar dentro de una clase. "public class Main {}" declara una clase llamada Main, que es pública, lo que significa que cualquier otra clase puede acceder a ella.
- ^ "¡Hola, mundo! - Tutorial interactivo gratuito de Java" . Aprenda Java . Consultado el 14 de marzo de 2020 .
"public static void main (String [] args) {}" es el punto de entrada de nuestro programa Java. el método principal debe tener esta firma exacta para poder ejecutar nuestro programa.
- ^ Guido van Rossum (15 de mayo de 2003). "Funciones de Python main ()" , comentariosCS1 maint: posdata ( enlace )
- ^ Code Like a Pythonista: Idiomatic Python Archivado el 27 de mayo de 2014 en Wayback Machine, en scripts de Python utilizados como módulos
- ^ Ned Batchelder (6 de junio de 2003). "Funciones de Python main ()" .
- ^ Programación de Ruby: Guía del programador pragmático, Ruby y su mundo - en Ruby
ARGV
- ^ "Releases.md" . GitHub Rust . Consultado el 15 de febrero de 2019 .
- ^ No debe confundirse con Swift Playgrounds , una aplicación de iPad desarrollada por Apple para aprender el lenguaje de programación Swift.
- ^ "UIApplicationMain (_: _: _: _ :) - UIKit" . Documentación para desarrolladores de Apple . Consultado el 12 de enero de 2019 .
- ^ "UIApplication - UIKit" . Documentación para desarrolladores de Apple . Consultado el 12 de enero de 2019 .
enlaces externos
- ¡Hola desde un mundo sin libc! (Parte 1) , 16 de marzo de 2010
- Cómo funciona el método principal en Java