Problemas de reglas en lenguaje C
C y C tienen estándares diferentes para la función main(), por lo que los analizaremos por separado.
Para lenguaje C:
En el estándar C89, el formato main() es aceptable, pero por supuesto es más sensato usar el siguiente estándar C99, que solo tiene el El siguiente formato es aceptable:
int main (void)
int main (int argc, char * argv[])
Podemos trabajar un poco en la función principal cambia, por ejemplo, podemos reemplazar int con un tipo personalizado (por supuesto, debe definirse como int), reemplazar *argv[] con **argv, etc.
Si no queremos introducir parámetros para el programa en la línea de comando, podemos elegir la primera forma.
De hecho, los nombres de los dos parámetros argc y argv en el segundo formulario se pueden cambiar, pero es mejor mantenerlos sin cambios.
El tipo de retorno de la función main() debe ser int; el valor entero devuelto se pasará a la persona que llama como código de retorno. (Esto permite que el código de retorno se pase a la persona que llama)
Para C:
Los siguientes son formatos aceptables:
int main ( int argc, char * argv[] )
int main ()
El primer formato sigue el estándar C99 el segundo formato se utiliza cuando no es necesario pasar parámetros al programa a través del comando; línea. Mismo formato que int main(void) especificado en el estándar C99.
(C) La diferencia entre int main() e int main(void):
Muchos programadores de C cometen el error de suponer que una función como esta no acepta ningún parámetro:
int foo();
De hecho, se supone que esta función acepta un número desconocido de parámetros (Anotación: ¡puede aceptar cualquier número de parámetros!). El uso correcto es agregar la palabra clave void entre paréntesis.
Reimpreso de: lt; type="text/javascript"gt; document.write('/u2014091/r/?97')/u2014091/r/?97
void ¿Cómo se maneja la función main()?
En funciones de llamada/retorno de estilo C/C, si no desea que la función devuelva ningún valor, puede definir el tipo de retorno usando void. Por ejemplo, un prototipo de función que no toma parámetros y no tiene valor de retorno podría verse así:
void foo(void
Un error común es que esta lógica también se aplica a función principal(). En realidad no lo es, la función main() es muy especial, siempre y cuando definas la función main() de acuerdo con el estándar (Anotación: ¡Incluso usando int main()! void main() a veces ocurren excepciones, pero solo en algunos Systems. Si no estás seguro de si estás usando uno de estos sistemas, la respuesta es simple: no puedes usar el formulario void main()
Si te han advertido en los foros, no. Si escribe un código que parece "void main", entonces la respuesta es simple, es bueno deshacerse de él. No se excuse diciendo "Mi maestro me dijo que era lo correcto". hábito de cometer errores.
Al escribir código seguro y compatible con los estándares, las personas pueden centrarse en otras cuestiones del programa en lugar de perder el tiempo en cuestiones estándar.
Pero ¿qué pasa con int main(int argc, char *argv[], char *envp[])?
Como versión extendida del estándar, la función main() se puede utilizar para extraer parámetros adicionales para acceder a variables de entorno en algunos sistemas. No se garantiza que este uso funcione en todos los entornos de compilación, por lo que es aconsejable utilizar el parámetro envp con precaución.
Finalmente, este enlace proporciona información más detallada sobre por qué void main(void) es un mal uso:
/zdanysdbb/archive/2009/01/12/3758148.aspx.