stringtranslate.com

Punto de entrada

Ejemplo de la función principal, en C#.
Cómo se vería en el código fuente de C# . Las distintas partes están etiquetadas como referencia.Main()

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]

Uso

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.

Contemporáneo

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_entrycampo del encabezado ELF. En la Colección de compiladores GNU (gcc), el punto de entrada utilizado por el enlazador es el _startsímbolo. De manera similar, en el formato ejecutable portátil , utilizado en Microsoft Windows , el punto de entrada se especifica mediante el AddressOfEntryPointcampo , 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 mainfunció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ó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, 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 ]

Punto de salida

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

Lenguajes de programación

En muchos lenguajes de programación, la mainfunció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:

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 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 argcy argvpueden 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 getenven 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 argcno es negativo y que argv[argc]es un puntero nulo . Por convención, los argumentos de línea de comandos especificados por argce argvincluyen el nombre del programa como primer elemento si argces mayor que 0; si un usuario escribe un comando de " rm file", el shell inicializará el rmproceso con argc = 2y argv = {"rm", "file", NULL}. Como argv[0]es el nombre con el que aparecen los procesos en ps, topetc., 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 execllamada 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 statico 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.::mainmain()

DO#

Al ejecutar un programa escrito en C# , el CLR busca un método estático marcado con la .entrypointdirectiva IL, que no toma argumentos o toma un solo argumento de tipo string[], y tiene un tipo de retorno de voido 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 Tasky Task<int>son los equivalentes asincrónicos de voidy int. asynces necesario para permitir el uso de asincronía (la awaitpalabra clave) dentro del método.

Limpio

Clean es un lenguaje de programación funcional basado en la reescritura de grafos. El nodo inicial tiene nombre Starty es de tipo *World -> *Worldsi 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.

Ceceo común

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 )

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

Dardo

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 mainy la ejecuta. Cualquier código Dart que se pretenda ejecutar cuando se inicie el programa debe incluirse en la mainfunción. A continuación, se muestra un ejemplo de una función simple mainen Dart:

void main () { print ( "¡Hola, mundo!" ); }   

En este ejemplo, la mainfunció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 mainfunció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 mainfunción es el punto de entrada que se debe utilizar para los programas Dart.

FORTRAN

FORTRAN no tiene una subrutina o función principal. En su lugar, PROGRAMse 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 PROGRAMdeclaració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 en la que no aparezca ninguna instrucción SUBROUTINE, FUNCTION o BLOCK DATA se considera el programa principal.

MOSQUITO

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_mainque 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 mainfunció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.Argsy os.Exitrespectivamente, ambos incluidos en el "os"paquete.

Haskell

Un programa Haskell debe contener un nombre mainligado a un valor de tipo IO t, para algún tipo t; [15] que normalmente es IO (). IOes una mónada , que organiza los efectos secundarios en términos de código puramente funcional . [16] El mainvalor representa el cálculo con efectos secundarios realizado por el programa. El resultado del cálculo representado por mainse descarta; es por eso que mainnormalmente 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.

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 [] ) 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 HelloWorldal 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.

LOGO

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 startupse 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

OCaml no tiene ninguna mainfunció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.argvy 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" ni ningún nombre similar.

programa Hola ( Salida ) ; comienzo writeln ( '¡Hola, mundo!' ) ; fin .  

Los argumentos de la línea de comandos se cuentan ParamCounty 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.

Perl

En Perl no existe una función principal. Las sentencias se ejecutan de arriba a abajo, aunque las sentencias de un BEGINbloque 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, @ARGVno 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 que no esté encapsulado en un encabezado de función se ejecuta tan pronto como se lo ve.

Lucio

En Pike la sintaxis es similar a la de C y C++. La ejecución comienza en main. La argcvariable " " guarda el número de argumentos pasados ​​al programa. La argvvariable " " guarda el valor asociado a los argumentos pasados ​​al programa.

Ejemplo:

 int main ( int argc , matriz ( cadena ) argv )    

Pitón

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.

Alternativamente, un programa puede estructurarse con una mainfunción explícita que contenga el código que se ejecutará cuando se ejecute un programa directamente, pero que también puede invocarse 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 maines 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.

QB64

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 )  

Rubí

En Ruby , no existe una función principal específica. En su lugar, el código escrito fuera de cualquier ámbito class .. endo module .. endse ejecuta en el contexto de un mainobjeto 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 classo modulese definen como métodos privados del mainobjeto " ". 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 ARGVmatriz 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 $0o $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 rubyinvocación.

Óxido

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.rso 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. } 

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.

// 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 @NSApplicationMainy @UIApplicationMain, respectivamente. Esos atributos son equivalentes en su propósito al main.marchivo en los proyectos Objective-C : declaran implícitamente la mainfunció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  } }

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 utilizar opcionalmente para acceder a la parte del argumento 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        

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.Openevento del Applicationobjeto del proyecto. Las aplicaciones de consola comienzan con el App.Runevento del ConsoleApplicationobjeto del proyecto. En ambos casos, la función principal se genera automáticamente y no se puede eliminar del proyecto.

Véase también

Referencias

  1. ^ "En informática, ¿qué es un punto de entrada? (con imagen)". wiseGEEK . Archivado desde el original el 2020-08-05 . Consultado el 2020-01-22 .
  2. ^ Decker, Karsten M.; Rehmann, René M. (1994). Entornos de programación para sistemas distribuidos masivamente paralelos: Conferencia de trabajo del grupo de trabajo 10.3 de la IFIP, del 25 al 29 de abril de 1994. Springer Science & Business Media. ISBN 978-3-7643-5090-1.
  3. ^ "Método principal en C#". GeeksforGeeks . 2018-11-30. Archivado desde el original el 2020-07-31 . Consultado el 2020-01-22 .
  4. ^ Wagner, Bill (1 de agosto de 2017). "Main() / Entry Points (C# Programming Guide) - Microsoft Developer Network". docs.microsoft.com . Archivado desde el original el 11 de noviembre de 2020 . Consultado el 3 de diciembre de 2018 .
  5. ^ "La función main()". ibm.com . IBM . Archivado desde el original el 2017-09-10 . Consultado el 2014-05-08 .
  6. ^ "Argumentos de línea de comandos y Main() (Guía de programación de C#)". Msdn.microsoft.com. Archivado desde el original el 9 de junio de 2014. Consultado el 8 de mayo de 2014 .
  7. ^ "Fundamentos de aplicaciones". Desarrollo de Android . linuxtopia.org. Archivado desde el original el 2013-12-31 . Consultado el 2014-02-19 .
  8. ^ argv: el término vector en el nombre de esta variable se usa en el sentido tradicional para referirse a cadenas.
  9. ^ "Tipos de parámetros y nombres del archivo main". Archivado desde el original el 10 de noviembre de 2012. Consultado el 28 de julio de 2016 .
  10. ^ Sección 3.6.1.2, Edición estándar de C++ 2011.
  11. ^ "El vector de argumento char *apple". Archivado desde el original el 22 de diciembre de 2015. Consultado el 12 de mayo de 2014 .
  12. ^ "Aplicaciones de consola en .NET o cómo enseñarle viejos trucos a un perro nuevo". Msdn.microsoft.com. 12 de junio de 2003. Archivado desde el original el 4 de febrero de 2008. Consultado el 19 de agosto de 2013 .
  13. ^ "El repositorio oficial para el diseño del lenguaje de programación C#: Dotnet/Csharplang". GitHub . 2019-08-26.
  14. ^ XL FORTRAN para AIX . Referencia del lenguaje. Tercera edición, 1994. IBM
  15. ^ "El informe de Haskell 98: módulos". Haskell.org. Archivado desde el original el 19 de agosto de 2013. Consultado el 19 de agosto de 2013 .
  16. ^ Algunos conceptos erróneos sobre Haskell: código idiomático, pureza, pereza y IO Archivado el 27 de julio de 2010 en Wayback Machine — sobre IO monádico de Haskell>
  17. ^ "El entorno del lenguaje Java". Oracle . Archivado desde el original el 20 de abril de 2019 . Consultado el 14 de marzo de 2020 . 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.
  18. ^ Schildt, Herbert (2019). Java: una guía para principiantes . Nueva York: McGraw-Hill Education. pág. 46. ISBN 978-1-260-44022-5. OCLC  1061561931. //Un programa JAVA comienza con una llamada a main().
  19. ^ "Hola, mundo: tutorial gratuito e interactivo de Java". Aprende Java . Consultado el 14 de marzo de 2020. 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.
  20. ^ "¡Hola, mundo! - Tutorial gratuito e interactivo sobre Java". Aprende 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.
  21. ^ Guido van Rossum (15 de mayo de 2003). «Funciones main() de Python». Archivado desde el original el 11 de julio de 2015. Consultado el 29 de junio de 2015 .comentarios
  22. ^ Código como un Pythonista: Python idiomático Archivado el 27 de mayo de 2014 en Wayback Machine —sobre scripts de Python utilizados como módulos
  23. ^ Ned Batchelder (6 de junio de 2003). «Funciones main() de Python». Archivado desde el original el 20 de septiembre de 2015. Consultado el 29 de junio de 2015 .
  24. ^ Programación en Ruby: Guía del programador pragmático, Ruby y su mundo Archivado el 31 de agosto de 2013 en Wayback Machine — en RubyARGV
  25. ^ "Releases.md". GitHub Rust. Archivado desde el original el 15 de mayo de 2015. Consultado el 15 de febrero de 2019 .
  26. ^ No debe confundirse con Swift Playgrounds Archivado el 8 de julio de 2022 en Wayback Machine , una aplicación para iPad desarrollada por Apple para aprender el lenguaje de programación Swift.
  27. ^ "UIApplicationMain(_:_:_:_:) — UIKit". Documentación para desarrolladores de Apple . Archivado desde el original el 2019-01-12 . Consultado el 2019-01-12 .
  28. ^ "UIApplication — UIKit". Documentación para desarrolladores de Apple . Archivado desde el original el 13 de enero de 2019. Consultado el 12 de enero de 2019 .

Enlaces externos