En programación informática , un punto de entrada es el lugar 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 . [ verificación fallida ] [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 lo hay) al tiempo de ejecución .
En algunos sistemas operativos y lenguajes de programación , el punto de entrada se encuentra en una biblioteca 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 biblioteca de ejecución por sí mismo. [2]
En sistemas simples, la ejecución comienza en la primera instrucción, lo cual es común en lenguajes interpretados , formatos ejecutables simples y cargadores de arranque . En otros casos, el punto de entrada se encuentra en alguna otra dirección de memoria conocida que puede ser una dirección absoluta o una dirección relativa ( offset ).
Como alternativa, la ejecución de un programa puede comenzar en un punto designado, 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 , se trata de una función llamada main
; como resultado, el punto de entrada a menudo se conoce como la 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]
Los puntos de entrada se aplican tanto al código fuente como a los archivos ejecutables . Sin embargo, en el desarrollo de software cotidiano , 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 aplicación (ABI) del sistema operativo real y son generados por el compilador o enlazador (si no están fijados por la ABI). Otros archivos de objetos enlazados también pueden tener puntos de entrada, que son utilizados más tarde por el enlazador al generar puntos de entrada de un archivo ejecutable.
Los puntos de entrada pueden pasar argumentos de comandos, variables u otra información como una variable local utilizada por el Main()
método. De esta manera, se pueden configurar opciones específicas al ejecutar el programa y luego el programa las interpreta. Muchos programas utilizan esto como una forma alternativa de configurar diferentes ajustes o realizar una variedad de acciones utilizando un solo programa.
En la mayoría de los lenguajes de programación y sistemas operativos populares actuales, 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 la Colección de compiladores GNU (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 se especifica mediante el AddressOfEntryPoint
campo , que se hereda de COFF . En los archivos COM , el punto de entrada está en el desplazamiento fijo de 0100h.
Una excepción al paradigma de punto de entrada único es Android . Las aplicaciones de Android no tienen un único punto de entrada, es decir, no tienen 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 utiliza ocasionalmente es el binario fat , que consiste en varios ejecutables para diferentes destinos empaquetados en un solo archivo. Lo más común es que esto se implemente mediante un único punto de entrada general, que es compatible con todos los destinos y se ramifica al punto de entrada específico del destino. Las técnicas alternativas incluyen el almacenamiento de ejecutables separados en forks separados , cada uno con su propio punto de entrada, que luego selecciona el sistema operativo.
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, tal 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, delimitado por un signo de dólar ($), por ejemplo directory.exe$make
.
La computadora Apple I también utilizó esto en cierta medida. Por ejemplo, un punto de entrada alternativo en el BASIC de Apple I mantendría el programa BASIC útil cuando se presionara accidentalmente el botón de reinicio. [ Aclaración necesaria ]
En general, los programas pueden salir en cualquier momento volviendo al sistema operativo o bloqueándose . 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 se especifica un único punto de salida en un programa. Sin embargo, en otros casos, los entornos de ejecución garantizan que los programas siempre finalicen de forma estructurada a través de un único punto de salida, lo que está garantizado a menos que el propio entorno de ejecución se bloquee; esto permite ejecutar código de limpieza, como atexit
controladores. Esto se puede hacer exigiendo que los programas finalicen regresando 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 por parte del entorno de ejecución.
En muchos lenguajes de programación, la main
función es el punto 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 del 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 que se ejecute la función principal, como los constructores de objetos globales de C++ .
En otros lenguajes, especialmente muchos lenguajes interpretados , la ejecución comienza en la primera declaración del programa.
A continuación se presenta una lista no exhaustiva de lenguajes de programación que describe su forma de definir el punto de entrada principal:
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.
En C y C++ , el prototipo de función de la función principal debe ser equivalente a uno de los siguientes:
int principal ( vacío ); int principal (); int principal ( int argc , char ** argv ); int principal ( int argc , char * argv []); int principal ( 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 ser el 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
, recuento de argumentos y argv
, vector de argumentos , [8] dan respectivamente el número y los valores de los argumentos de la línea de comandos del programa . Los nombres de argc
y argv
pueden ser cualquier identificador válido en C, pero es una convención común utilizar estos nombres. En C++, los nombres deben tomarse literalmente y el "void" en la lista de parámetros debe omitirse, si se desea una conformidad estricta. [9] Los estándares de 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 proporciona el entorno del programa , de lo contrario accesible a través de getenv
en stdlib.h
:
int principal ( 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 que se está ejecutando: [11]
int principal ( int argc , char ** argv , char ** envp , char ** manzana );
El valor devuelto por la función principal se convierte en el estado de salida del proceso, aunque el estándar C solo atribuye un significado específico a dos valores: EXIT_SUCCESS
(tradicionalmente 0) y EXIT_FAILURE
. El significado de otros posibles valores de retorno está definido por la implementación. En caso de que el programador no defina un valor de retorno, el compilador inserta un implícito return 0;
al final de la función; este comportamiento es requerido por el estándar C++.main()
Se garantiza que argc
no es negativo y que argv[argc]
es un puntero nulo . Por convención, los argumentos de 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 con el que aparecen los procesos en ps
, top
etc., algunos programas, como los daemons o los que se ejecutan dentro de un intérprete o una máquina virtual (donde argv[0]
sería el nombre del ejecutable del host), pueden optar por alterar su argv para dar un argv[0]
, generalmente por medio de la exec
llamada al sistema.
La main()
función es especial; normalmente cada programa C y C++ debe definirla exactamente una vez.
Si se declara, main()
debe declararse como si tuviera enlace externo; no se puede declarar static
o inline
.
En C++, debe estar en el espacio de nombresmain()
global (es decir, ), no se puede sobrecargar y no puede ser una función miembro , aunque el nombre no esté reservado de otra manera, y se puede usar para funciones miembro, clases, enumeraciones o funciones no miembro en otros espacios de nombres. En C++ (a diferencia de C) no se puede llamar de forma recursiva y no se puede tomar su dirección.::main
main()
Al ejecutar un programa escrito en C# , el CLR busca un método estático marcado con la .entrypoint
directiva IL, que no toma argumentos o toma un solo argumento de tipo string[]
, y tiene un tipo de retorno de void
o int
, y lo ejecuta. [12]
void estático Main (); void estático Main ( cadena [] argumentos ); int estático Main (); int estático Main ( cadena [] argumentos );
Los argumentos de la línea de comandos se pasan en args
, de forma similar a como se hace en Java. En las versiones que Main()
devuelven un entero, de forma 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]
estática asíncrona Tarea Principal () estática asíncrona Tarea < int > Principal () estática asíncrona Tarea Principal ( cadena []) estática asíncrona Tarea < int > Principal ( cadena [])
Los tipos Task
y Task<int>
son los equivalentes asincrónicos de void
y int
. async
es necesario para permitir el uso de asincronía (la await
palabra clave) dentro del método.
Clean es un lenguaje de programación funcional basado en la reescritura de grafos. El nodo inicial tiene nombre Start
y es de tipo *World -> *World
si cambia el mundo o de algún tipo fijo si el programa solo imprime el resultado después de reducir Start
.
Inicio :: * Mundo -> * Mundo Inicio mundo = startIO ...
O incluso más simple
Inicio :: String Inicio = "¡Hola, mundo!"
Se le dice al compilador qué opción usar para generar el archivo ejecutable.
ANSI Common Lisp no define una función principal; en su lugar, el código se lee y se evalúa de arriba a abajo en un archivo fuente. Sin embargo, el código siguiente emulará una función principal.
( defun hello-main () ( formato t "Hola mundo!~%" )) ( hola-principal )
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 ( cadena [] argumentos );
Los argumentos de la línea de comandos se pasan en args
, de forma similar a como se hace en C# o Java. En las versiones que main()
devuelven un entero, de forma similar a C y C++, se devuelve al entorno como el estado de salida del proceso.
Dart es un lenguaje de programación de propósito general que se utiliza a menudo para crear aplicaciones web y móviles. Al igual que muchos otros lenguajes de programación, Dart tiene un punto de entrada que sirve como punto de partida para un programa Dart. El punto de entrada es la primera función que se ejecuta cuando se ejecuta un programa. En Dart, el punto de entrada suele ser una función denominada main
. Cuando se ejecuta un programa Dart, el entorno de ejecución de Dart busca una función denominada main
y la ejecuta. Cualquier código Dart que se pretenda ejecutar cuando se inicie el programa debe incluirse en la main
función. A continuación, se muestra un ejemplo de una función simple main
en Dart:
void main () { print ( "¡Hola, mundo!" ); }
En este ejemplo, la main
función simplemente imprime el texto Hello, world!
en la consola cuando se ejecuta el programa. Este código se ejecutará automáticamente cuando se ejecute el programa Dart.
Es importante tener en cuenta que, si bien la main
función es el punto de entrada predeterminado para un programa Dart, es posible especificar un punto de entrada diferente si es necesario. Esto se puede hacer mediante la @pragma("vm:entry-point")
anotación en Dart. Sin embargo, en la mayoría de los casos, la main
función es el punto de entrada que se debe utilizar para los programas Dart.
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 HOLA IMPRIMIR * , "Cint!" FIN DEL PROGRAMA HOLA
Algunas versiones de Fortran, como las de IBM System/360 y mainframes posteriores, no admiten la instrucción PROGRAM. Muchos compiladores de otros fabricantes de software permiten compilar un programa Fortran sin una instrucción PROGRAM. En estos casos, cualquier módulo que tenga una instrucción que no sea un comentario donde no aparezca ninguna instrucción SUBROUTINE, FUNCTION o BLOCK DATA, se considera el programa principal.
Con GNAT , el programador no necesita escribir una función denominada main
; se puede compilar un archivo fuente que contenga un único subprograma en un ejecutable. Sin embargo, el enlazador creará un paquete ada_main
que contendrá y exportará una función principal de estilo C.
En el lenguaje de programación Go , la ejecución del programa comienza con la main
función delpackage main
paquete principal importar "fmt" func main () { fmt.Println ( " ¡ Hola , mundo!" ) }
No hay forma de acceder a argumentos o a un código de retorno fuera de la biblioteca estándar en Go. Se puede acceder a ellos mediante os.Args
y os.Exit
respectivamente, ambos incluidos en el "os"
paquete.
Un programa Haskell debe contener un nombre main
ligado a un valor de tipo IO t
, para algún tipo t
; [15] que normalmente es 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 con efectos secundarios realizado por el programa. El resultado del cálculo representado por main
se descarta; es por eso que main
normalmente tiene tipo IO ()
, lo 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!"
Los argumentos de la línea de comandos no se proporcionan a main
; deben obtenerse mediante otra acción de E/S, como System.Environment.getArgs
.
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 [] ) void main ()
Los argumentos de la línea de comandos se pasan en 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 se incluye en 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 lleva un registro de cuántos elementos hay.
La función principal debe estar incluida 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 podría verse así:
clase pública HolaMundo { public static void main ( String [] args ) { System . println ( " ¡ Hola, mundo!" ) ; } }
Para ejecutar este programa, se debe llamar java HelloWorld
al directorio donde se encuentra el archivo de clase HelloWorld.class
compilado ). Como alternativa, los archivos JAR ejecutables utilizan un archivo de manifiesto para especificar el punto de entrada de una manera que sea independiente del sistema de archivos desde la perspectiva del usuario.
En FMSLogo los procedimientos al ser cargados no se ejecutan, para que se ejecuten es necesario utilizar este código:
Para procname ... ; Comandos de inicio (como imprimir [Bienvenido])fin
hacer "inicio [procname]
La variable startup
se utiliza para la lista de acciones de inicio, pero la convención es que esto llama a un procedimiento que ejecuta las acciones. Ese procedimiento puede tener cualquier nombre.
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 denominada Sys.argv
y el estado de salida es 0 de forma predeterminada.
Ejemplo:
print_endline "Hola mundo"
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
" ni ningún nombre similar.
programa Hola ( Salida ) ; begin writeln ( '¡Hola, mundo!' ) ; end .
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 de ellas, que se utiliza para inicializar el módulo. Estos bloques se ejecutan antes de que se llame al punto de entrada del programa principal.
En Perl no existe una función principal. Las sentencias se ejecutan de arriba a abajo, aunque las sentencias de un BEGIN
bloque se ejecutan antes que las sentencias normales.
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 no tiene una función "principal". A partir de la primera línea de un script PHP, cualquier código que no esté encapsulado en un encabezado de función se ejecuta tan pronto como se lo ve.
En Pike la sintaxis es similar a la de C y C++. La ejecución comienza en main
. La argc
variable " " guarda el número de argumentos pasados al programa. La argv
variable " " guarda el valor asociado a los argumentos pasados al programa.
Ejemplo:
int main ( int argc , matriz ( cadena ) argv )
Los programas Python se evalúan de arriba a abajo, como es habitual en los lenguajes de programación: el punto de entrada es el inicio del código fuente. Dado que las definiciones deben preceder al uso, los programas suelen estructurarse con las definiciones en la parte superior y el código a ejecutar en la parte inferior (sin sangría), de forma similar al código para un compilador de una sola pasada , como en Pascal.
Como alternativa, un programa puede estructurarse con una main
función explícita que contenga el código que se ejecutará cuando se ejecute un programa 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 mediante el siguiente modismo, que se basa en que la variable interna __name__
se establezca en __main__
cuando se ejecuta un programa, pero no cuando se importa como un módulo (en cuyo caso se establece en el nombre del módulo); existen muchas variantes de esta estructura: [21] [22] [23]
importar sistemadef main ( argv ): n = int ( argv [ 1 ]) imprimir ( n + 1 )si __name__ == '__main__' : sys . exit ( main ( sys . argv ))
En este lenguaje, la llamada al punto de entrada designado main
es explícita y la interacción con el sistema operativo (recepción de argumentos, llamada a la salida del sistema) se realiza explícitamente mediante llamadas a la biblioteca, que en última instancia son manejadas por el entorno de ejecución de Python. Esto contrasta con C, donde estas llamadas se realizan de manera implícita por el entorno de ejecución, según una convención.
El lenguaje QB64 no tiene función principal, el código que no está dentro de una función o subrutina se ejecuta primero, de arriba hacia abajo:
imprimir "Hola mundo! a =" ; a = getInteger ( 1.8 d ): imprimir a
función getInteger ( n como doble ) getInteger = int ( n ) fin de la función
Los argumentos de la línea de comandos (si los hay) se pueden leer utilizando la función COMMAND$ :
línea de comando compartida dim como cadena commandline = COMMAND$
'Se pueden leer varios argumentos de línea de comandos separados por espacios usando COMMAND$(n) commandline1 = COMMAND$ ( 2 )
En Ruby , no existe una función principal específica. En su lugar, el código escrito fuera de cualquier ámbito class .. end
o module .. end
se ejecuta en el contexto de un main
objeto especial " ". Se puede acceder a este objeto mediante self
:
irb(principal):001:0> yo mismo => principal
Tiene las siguientes propiedades:
irb(main):002:0> self . class => Objeto irb(main):003:0> self . class . ancestros => [Objeto, Núcleo, ObjetoBásico]
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
, dichos métodos se convierten en métodos privados de casi todos los objetos:
irb(main):004:0> def foo irb(main):005:1> 42 irb(main):006:1> end => nil irb(main):007:0> foo => 42 irb(main):008:0> [] .foo NoMethodError: se llamó al método privado `foo' para []:Array desde (irb):8 desde /usr/bin/irb:12:in `<main>' irb(main):009:0> false .foo NoMethodError: se llamó al método privado `foo' para false:FalseClass desde (irb):9 desde /usr/bin/irb:12:in `<main>'
La cantidad y los valores de los argumentos de la línea de comandos se pueden determinar utilizando la ARGV
matriz constante:
$ irb /dev/tty barra de foo tty(principal):001:0> ARGV ARGV => ["foo", "bar"] tty(principal):002:0> ARGV.tamaño ARGV.tamaño => 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]
De manera similar a Python, se podría utilizar:
si __FILE__ == $PROGRAM_NAME # Poner el código "principal" aquí fin
ejecutar algún código solo si su archivo se especificó en la ruby
invocación.
En Rust, el punto de entrada de un programa es una función denominada main
. Normalmente, esta función se encuentra en un archivo denominado 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 `Result` de valor `Ok` con el contenido `()`, es decir, una tupla vacía. }
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.
// Hola Mundo.patio de recreodeje que hola = "hola" deje que mundo = "mundo"deje que holaMundo = hola + " " + mundoimprimir ( holaMundo ) // hola mundo
Las aplicaciones basadas en Cocoa y Cocoa Touch escritas en Swift suelen inicializarse con los atributos @NSApplicationMain
y @UIApplicationMain
, respectivamente. Estos atributos son equivalentes en su propósito al main.m
archivo en los proyectos Objective-C : declaran implícitamente la main
función que llama a UIApplicationMain(_:_:_:_:)
[27] , lo 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 delegado de aplicación.
// AppDelegate.swiftimportar UIKit@UIApplicationMain clase AppDelegate : UIResponder , UIApplicationDelegate { var ventana : UIWindow ? func aplicación ( _ aplicación : UIApplication , didFinishLaunchingWithOptions launchOptions : [ UIApplication . LaunchOptionsKey : Any ]?) -> Bool { devolver verdadero } }
En Visual Basic , cuando un proyecto no contiene formularios, el objeto de inicio puede ser el Main()
procedimiento. La Command$
función se puede utilizar opcionalmente para acceder a la parte de argumentos de la línea de comandos utilizada para iniciar el programa:
Sub Main () Depuración . Imprimir "¡Hola mundo!" MsgBox "Los argumentos, si los hay, son: " & Command $ End Sub
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.
Dentro de la clase HelloWorld, declaramos un único 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 de salida. El objeto de salida es una variable de clase en la clase System que realiza operaciones de salida en archivos.
//Un programa JAVA comienza con una llamada a main().
En Java, cada línea de código que se pueda 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.
"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.
ARGV