Saludos :)
Sólo queria preguntar una duda que tengo. Cuando compilo un programa en C e incluyo el #define <stdio.h> pero no el conio.h puedo usar las funciones getch() y getche.
Sin embargo, si busco en la librería de stdio.h no salen, sin embargo si para la librería conio.h.
¿Es posible que funcione por compilar desde Windows aunque no incluya las librerías? Es que no se muy bien por que pasa eso :)
Del mismo modo, puedo usar system() sin incluir stdlib.h :S
Gracias
¿Qué compilador usas?
Me pasa tanto usando el MinGW en windows, como con el de DevC++ :)
Dev-C++ usa MinGW también; el compilador te debe estar metiendo basura (DLLs adicionales que no necesitas) en tu ejecutable. Bájate el Dependency Walker para ver si se trata de eso.
no estoy seguro puede ser ncurses lo que buscas, no uso windows de momento pero creo que dev-c++ usa gcc y conio no existe para gcc
o tal vez uconio ?
pásate por aquí
http://es.tldp.org/Tutoriales/NCURSES/tutorial-ncurses.html (http://es.tldp.org/Tutoriales/NCURSES/tutorial-ncurses.html)
conio.h no existe para Linux pero sí para Windows y es compatible con la gran mayoría de compiladores de C.
Cita de: abreu20011 en 28 Julio 2012, 21:58 PM¿Es posible que funcione por compilar desde Windows aunque no incluya las librerías? Es que no se muy bien por que pasa eso :)
Del mismo modo, puedo usar system() sin incluir stdlib.h
Es posible pero no se recomienda.
Antes de llamar a una función se debe indicar su prototipo para que así el compilador pueda verificar que las llamadas y definición (si aplica) coincidan. La forma usual es incluyendo el encabezado que corresponda. Por ejemplo:
#include <stdlib.h> /* Prototipo de "system" */
/* ... */
system("pause");
Si no se indica el prototipo el compilador asume lo siguiente:
1) El tipo de retorno de la función es "int".
2) El numero y tipo de cada argumento esta dado por la llamada.
Si ello no es correcto se presentan problemas. Por ejemplo:
#include <stdio.h>
int main(void)
{
double num;
num = atof("3.141592"); /* Falta el prototipo de "atof" */
printf("%f\n", num);
return 0;
}
Ahí el tipo de retorno de "atof" se asume como "int" cuando en realidad es de tipo "double".
Para evitar casos como ese lo mejor es incluir los prototipos (vía encabezados) y nos olvidamos del problema.
Un saludo
Saludos y muchas gracias por las diversas respuestas :)
El Dependency Walker lo he bajado y comprobado mi archivo, y no me entero mucho de como va, más que de que tengo un error (no sé si mi archivo, o un error del programa a leerlo) y sí, encontré la función getch() pero no aclara mi duda >.<
El NCurses lo miré por encima y tiene buena pinta, pero primero quiero acabar bien C y las librerías ANSI C que ponerme con otra cosa. Por otra parte, no entiendo muy bien en qué me puede ayudar respecto a mi duda.
Y respecto a a lo que dices rir3760, ¿como que es posible, pero no se recomienda? ¿Me estas diciendo que es culpa de Windows que se me añaden esas librerías? Si es asi, pues que allanamiento de la programación xD
He estado mirando, y me he dado cuenta de que puedo, sencillamente, no declarar ni un solo include que el programa anda. Con el error que dices, pero anda. ¿Esto es correcto? ¿Es decir, si no declaráis las librerías os va? :S
Que yo sepa, no debería ser así, no? Porque si no, ¿como sabe que printf hace una cosa y no otra? Me siento muy perdido ahora mismo xD
Un saludo
Cita de: abreu20011 en 29 Julio 2012, 05:26 AM
El NCurses lo miré por encima y tiene buena pinta, pero primero quiero acabar bien C y las librerías ANSI C que ponerme con otra cosa. Por otra parte, no entiendo muy bien en qué me puede ayudar respecto a mi duda.
Si quieres aprender, no uses
conio.h ya que no forma parte del estándar.
Cita de: abreu20011 en 29 Julio 2012, 05:26 AM
Y respecto a a lo que dices rir3760, ¿como que es posible, pero no se recomienda? ¿Me estas diciendo que es culpa de Windows que se me añaden esas librerías? Si es asi, pues que allanamiento de la programación xD
Es posible si el compilador añade las librerías por defecto, la culpa no es de Windows. Por eso te digo que compruebes con el Dependency Walker a ver si realmente es el compilador quien te añade basura.
Mira abreu20011: Si andas en un compilador GCC en tu caso, dev-c++ compila con GCC, la causa a tu problema es que a veces cuando el IDE intenta buscar los binarios, libs e includes, no los encuentra porque pierde el enlce a los respectivos directorios. Verifica bien la configuracion de tu IDE y si el problema persiste entonces reinstala el IDE. Otra causa puede ser cuando incluyes libs que hacen llamadas desde si mismas a otras libs, por ejemplo windows.h hace llamdas a stdlib.h y tambien a winsock.h, sino reinicia tu ordenador y vuelve a iniciar el IDE y compila, si el problema sigue entonces postea nuevamente !!
Suerte amigo !! :xD
Yo también me había preguntando esto, me parece que usando Dev C++ no necesito utilizar las directivas de preprocesado include para agregar los archivos de cabeceras stdio.h y stdlib.h, ya que sin agregar esas cabeceras puedo utilizar las funciones printf, scanf, system, incluso getch() a pesar que no pertenece a la biblioteca estándar. :-(