Si quereis proponer algun añadido al FAQ ponedlo en este hilo.
Preguntas y Errores más Frecuentes
1.- Valores de retorno y parámetros de la función main()
Según el estándar, la función main sólo tiene un posible valor de retorno: int. Ni void, ni un valor indeterminado (es decir, no poner nada) ni ningún otro.
Si te fastidia tener que escribir un return al final de la ejecución de la función main(), te alegrará saber que, al menos en C++, no es necesario escribir una instrucción return de forma explícita, ya que el compilador asume por defecto un return 0, que se considera que la ejecución ha finalizado correctamente.
Por el momento no tengo información acerca de lo que dice el estándar de C, así que si quieres estár seguro de que sigues el estándar tendrás que poner un return 0 en la función main() (venga, que no son tantos caracteres
)Adicionalmente los únicos parámetros estándar a la función main son, o bien ninguno: int main () {} (para los programadores de C, no hay que poner void) o bien: int main (int argc, char * argv[]) {}
En este link está la opinión de Bjarne Stroustrup - creador del lenguaje C++ - al respecto: http://www.research.att.com/~bs/bs_faq2.html#void-main
2.- Uso de la biblioteca conio.h
La biblioteca conio.h no es estándar sino que es propiedad de Borland, y está incluida en sus compiladores. Es una biblioteca de manejo de entrada y salida de datos en la consola para el sistema DOS. Que no sea estandar significa que no la encontrarás implementada -o al menos totalmente- en muchos compiladores, y más importante, en otros sistemas, lo que reduce la portabilidad de tu código. Por otro lado la biblioteca se considera obsoleta, y es posible que algunas de las funciones que incluye no funcionen o lo hagan incorrectamente.
Pero lo más importante es darse cuenta de que esta biblioteca no es estrictamente necesaria para programar. Por experiencia las funciones más usadas de esta biblioteca son, con diferencia, clrscr() gotoxy() y getch().
clrscr() borra la pantalla, algo que por lo general no es necesario; si estás ejecutando un programa en línea de comandos es fácil y rápido teclear un comando (cls, clear) que borre la pantalla en cuestión si lo necesitas. Por contra puede que sea molesto que un programa tome la iniciativa y borre la pantalla, ya que quizá tenga datos que el usuario quiera conservar. Es decir que no pasa nada si no borras la pantalla. Normalmente la persona que usa un programa de línea de comandos no espera que eso ocurra.
gotoxy() el cursor en una determinada posición de la pantalla. Esto puede resultar útil en ocasiones, pero seamos sinceros: no suele ser muy necesario mover el cursor por la pantalla, o al menos no extrictamente necesario. Por ejemplo si estás aprendiendo a programar, eso es completamente supérfluo. Si programas una aplicación avanzada es casi seguro que tendrá un interface Gráfico. En último caso, si estás programando una aplicación avanzada en consola, prosiblemente a esas alturas ya sabrás cómo hacer tú mismo esta función utilizando llamadas al sistema, lo que tiene el beneficio de que puedes encapsular esa función de cara a la portabilidad, en vez de confiar en una función de biblioteca dependiente del sistema.
getch() recoge un carácter de la entrada estándar. Para eso tienes cerca de miles de funciones estándar que lo hacen. Vale, quizá no tantas, pero tienes al menos una en C getchar() y otra en C++ std::cin.get() ¿Porque usar getch() que NO es estándar cuando puedes usar una función estándar que hace exactamente lo mismo?
Antes de que me llameis mentiroso, hay que reconocer que getch() no hace exactamente lo mismo que las otras dos funciones. getch() NO presenta el caracter capturado por la pantalla y la entrada es sin buffer (lo que viene a decir que no hace falta pulsar enter) Sin embargo no creo que eso por lo general sea un grave problema, es más, una entrada sin buffer puede ser incluso un problema: no puedes corregir la entrada si te equivocas.










Autor


En línea



Muchas gracias por la colaboración jefe



