El estándar C nunca menciona esta función _start
; No creo que C++ lo haga tampoco.
En C antes de la norma ISO 1999, si la ejecución llega al final de main()
sin ejecutar una declaración return
, o ejecuta una instrucción return
que no especifica un valor, a continuación, "el estado de terminación devueltos al entorno de acogida es indefinido ".En la práctica, he visto implementaciones donde dicho programa devuelve un estado de 1 (falla), o algún valor arbitrario en la memoria, como el resultado de la última función que se llamó.
El estándar ISO C de 1999 cambió esto: "Alcanzar el} que termina la función principal devuelve un valor de 0". Esto coincide con la regla de que C++ ha tenido por lo menos desde la primera ISO C++ estándar en 1998.
(Como una cuestión de estilo, prefiero tener una explícita return 0;
al final de main
, incluso si no es estrictamente necesario. esto es consistente con int
funciones distintas de main
, y hace que para una mejor portabilidad para pre-C99 compiladores de C.)
Todo esto supone que main
se define con un tipo de retorno de int
. Es el único tipo específicamente compatible con el estándar C (int main(void)
o int main(int argc, char *argv[])
o equivalente), pero las implementaciones (alojadas) pueden admitir otras definiciones definidas por la implementación. El estándar C90 no cubre explícitamente este caso, pero C99 dice: "Si el tipo de devolución no es compatible con int, el estado de terminación devuelto al entorno del host no está especificado".
El estándar C++ es un poco diferente. Para las implementaciones alojadas, se debe definir main
para devolver int
. Los parámetros están definidos por la implementación, pero ambas formas estándar de C deben ser compatibles.
Para una implementación alojada en C o C++, no hay una buena razón que conozca para definir main
con un tipo de devolución que no sea int
. Solo use una de las dos definiciones estándar, y la pregunta no surgirá.
Para "implementaciones independientes", "el nombre y tipo de la función llamada en el programa de inicio están definidos por la implementación". Por lo tanto, el punto de entrada podría legítimamente devolver void
u otra cosa, y es posible que ni siquiera se llame main
. Tenga en cuenta que una "implementación independiente" es una "en la que la ejecución del programa C puede tener lugar sin ningún beneficio de un sistema operativo", típicamente un sistema integrado.
Me gustaría fundir el puntero de la función de imagen, pero me gustaría saber de alguien que sepa la verdad. No puedo esperar la respuesta. : D – shinkou
Las restricciones en el valor de retorno de main son diferentes en C y C++ – fefe
@fefe - ¿En serio? Pensé que se requería que ambos regresaran int. ¿Obtuvieron los números de para para leer? Tengo C99 y C++ 89, C++ 11 –