programacion - "Int main(vooid)"? ¿Cómo funciona?
que es la funcion main en el lenguaje c (4)
En C, el tipo predeterminado para un argumento de función es int
. Por lo tanto, su programa está tratando la palabra vooid
como int main(int vooid)
, que es un código perfectamente válido.
Hace poco tuve que escribir un pequeño programa de prueba C y, en el proceso, cometí un error ortográfico en la función principal al usar accidentalmente vooid
lugar de void
.
Y aún así funcionó.
Reduciéndolo a su versión completa más pequeña, terminé con:
int main (vooid) {
return 42;
}
Esto realmente compila ( gcc -Wall -o myprog myprog.c
) y, cuando se ejecuta, devuelve 42.
¿Cómo es exactamente este código válido?
Aquí hay una transcripción cortada y pegada de mi shell bash
para mostrar lo que estoy haciendo:
pax$ cat qq.c
int main (vooid) {
return 42;
}
pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq
pax$ echo $?
42
Es un código válido, porque myprog.c contiene:
int main (vooid) // vooid is of type int, allowed, and an alias for argc
{
return 42; // The answer to the Ultimate Question
}
vooid
contiene uno más el número de argumentos pasados (es decir, argc
). Entonces, en realidad, todo lo que has hecho es cambiar el nombre de argc
a vooid
.
Simplemente usa la sintaxis de declaración de función "antigua"; está implícitamente declarando un parámetro int
llamado vooid
.
Solo gcc -std=c89 -Wall -o qq qq.c
y gcc -std=gnu89 -Wall -o qq qq.c
no emiten una advertencia. Todos los demás estándares emiten una advertencia sobre el tipo vooid
int
para vooid
.
int main(chart)
comporta de la misma manera que hace int main (vooid)
.
return vooid;
devuelve la cantidad de argumentos de línea de comando.
Probé con gcc 4.4.5 en el sistema de prueba Debian.