|Lo que no hay que hacer en C/C++. Nivel basico|
skan:
Hola
Había leído esto hace un tiempo en el libro "effective c++" y algún otro sitio.
Hoy he querido consultar otra vez este tipo de comandos (como fgets o strncpy) pero no aparecen en libros modernos como Prata 6th edition o Professional C++.
¿Quiere eso decir que ya no son necesarios?
Lo digo porque get, strcpy... aceptan también un parámetro especificando el número de caracteres. ¿Qué ventaja hay ahora por ejemplo entre fgets y get?
saludos
fakundo (sylas):
Buen post aun que yo no me entero mucho pero comprendo algo pero es normal jeje aun hago la eso
DéstroReflex:
Gracias por la explicación, son el tipo de cosas que te enseñan "por defecto" pero no tienes ni idea de que función realmente cumplen y qué podrían afectar.
Peregring-lk:
Nota: Respecto a los ejemplos que voy a poner aquí: ¡¡no lo hagáis en casa!! Son prácticas permitidas pero ¡antigüas, deprecated e incluso mal vistas!
Respecto al `void main()` que se cita en la guía, si programas en C++, un compilador de C++ decente te dirá que es un error de compilación y no te dejará continuar. No es que sea una mala costumbre, es que es un programa con un error sintáctico.
Sin embargo, si `main` tiene tipo `int main()`, pero no escribes un `return`, no te dará ningún error de compilación porque el estándar dice que el compilador debe añadir al final del `main` un `return 0` si no lo tiene ya. Y los compiladores obedecen al estándar como buenos esclavos.
En C, sin embargo, la cosa es aún más permisiva. Puedes no escribir el `return`, y el compilador lo añadirá. Puedes hacer que su tipo de retorno sea `void`, y el compilador también añadirá el `return 0`: ¿pero eso no puede ser? ¿un `void` no puede devolver un `int`? Ya, pero es que ese `return` se añade a nivel de ensamblador, y en ensamblador no existen tipos.
Incluso en C puedes no escribir tipo de retorno:
Código
main() {}
El compilador solo te lanzará un warning diciendo que el tipo de retorno por defecto es `int` (y también te añadirá el `return 0`). De hecho, en C puedes declarar cualquier cosa sin tipo (tipos de retorno, parámetros o variables; todas serán por defecto `int`, eso sí, con warnings por doquier):
Código
void f(a) {}
Y `a` tendrá por defecto tipo `int` (con su correspondiente warning). Y llevando al extremo las cosas raras, ésto también es C estándar (se permite por retrocompatibilidad con versiones antigüas de C):
Código
void f(a) int a;
{}
Aquí, el tipo de `a` se declara a posteriori, entre el nombre de la funcion y su cuerpo. No hace falta decir que todo ésto no se puede hacer en C++ (un compilador de C++ gritará como una loca).
Y repito, no hagáis nada de ésto en casa si no queréis que mate a un gatito.
Seyro97:
Otra es no usar namespaces (sobre todo cuando solo vas a usar cout xD). Pongo un ejemplo:
Código 'malo':
Código
#include <iostream>
using namespace std;
int main() {
cout << "HOLA" << endl;
cin.get();
return 0;
}
Código 'bueno':
Código
#include <iostream>
int main() {
std::cout << "HOLA" << std::endl;
std::cin.get();
return 0;
}
Navegación
[#] Página Siguiente
[*] Página Anterior