statement implícita de la función ‘getch’

Tengo un progtwig simple:

#include  #include  int main(void){ printf("Hello world!\n"); getch(); return 0; } 

Aunque recibo la advertencia

 implicit declaration of function 'getch' 

el progtwig funciona bien ¿Echo de menos algo? Y si lo hago, ¿por qué funciona bien el progtwig?

Recibes la advertencia

 implicit declaration of function 'getch' 

Porque no has incluido ningún encabezado que declare getch . No se declara tal función en los encabezados estándar o .

De hecho, no hay ninguna función llamada getch en ningún encabezado C estándar.

Antes del estándar C99, el lenguaje C permitía llamadas a funciones sin statement visible. Dicha llamada en efecto crearía una statement implícita de una función que devuelve int y toma argumentos de cualquier tipo (promovido) que realmente pasó.

Dependiendo de esto nunca ha sido una buena idea. Siempre debe tener una directiva #include adecuada para el encabezado que declara cualquier función de biblioteca que use en su progtwig.

C99 descartó la regla ” int implícita” e hizo que cualquier llamada a una función sin statement visible constituyera una infracción de restricción , que requiere un diagnóstico (se permite que ese diagnóstico sea un error no fatal).

Si está comstackndo en Windows, si recuerdo correctamente, hay una función getch() declarada en . Si desea usar esa función, debe agregar #include a su progtwig.

No recomiendo hacer esto; el uso de getch() es innecesario y hace que su progtwig no sea portátil. Algunos entornos de desarrollo de Windows dificultan la ejecución de “progtwigs de consola” (progtwigs que se imprimen en una salida estándar en lugar de crear una GUI); a menudo, la ejecución de dicho progtwig crea una ventana temporal que se destruye tan pronto como el progtwig finaliza. Llamar a la función estándar getchar() es otra forma de evitar que la ventana se desvanezca. O puede ejecutar el progtwig desde un indicador de comando, y su salida aparecerá en su ventana de comando actual.

Si está comstackndo en un sistema similar a UNIX, hay otra función llamada getch() , declarada en . Puedo comstackr y ejecutar su progtwig en Linux si agrego -lcurses a la línea de comandos del comstackdor. Pero no debe usar esa función getch() si no ha configurado primero el entorno de las cursas, y está bastante claro que no desea hacerlo.

Idealmente, el progtwig clásico “hola mundo” debería ser simplemente:

 #include  int main(void) { printf("Hello world!\n"); return 0; } 

La forma en que se ejecute y le permita ver la salida depende de su entorno (del que no nos ha hablado).

Para Linux, use este código:

 #include  #include  #include  int getch (void) { int ch; struct termios oldt, newt; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON|ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); ch = getchar(); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); return ch; } 

Para Windows, agregue esta línea:

 #include