Yo en mi desconocimiento la suelo borrar y el programa me compila con normalidad, pero siempre me pregunto si el IDE escribió esas líneas es porque son necesarias pero el código compila entonces no se si deba borrarlas o no.
Imagina que compras un coche y en el concesionario te dan las llaves de tu nuevo flagrante vehículo, te dicen "Usa estas llaves para cerrar el vehículo cuando lo estaciones" pero tu ves que el coche funciona igual tanto si lo cierras al estacionarlo como si lo dejas abierto.
Así que nunca cierras tu coche, y durante un tiempo todo va perfectamente hasta que un día ¡te lo roban!.
En c++ el sistema de inclusiones funciona como un simple copia-pega de los archivos mencionados en las directivas de inclusión (#include
), puedes ver más detalles en este hilo así que vamos a suponer que tienes un archivo Biblioteca.h
que define el tipo Biblioteca
:
Biblioteca.h
struct Biblioteca
{
};
Cuando este archivo es incluido es incluido en otro:
main.cpp
#include "Biblioteca.h"
int main()
{
Biblioteca biblioteca;
return 0;
}
Se genera este archivo para ser compilado:
struct Biblioteca // Proviene de #include "Biblioteca.h" en main.cpp
{
};
int main()
{
Biblioteca biblioteca;
return 0;
}
Ahora, supongamos que tienes otro archivo que usa tu objeto Biblioteca
:
Alejandria.h
#include "Biblioteca.h"
struct Alejandria
{
Biblioteca b;
};
Y lo incluyes también en main.cpp
:
main.cpp
#include "Biblioteca.h"
#include "Alejandria.h"
int main()
{
Biblioteca biblioteca;
Alejandria alejandria;
retorn 0;
}
Se genera este archivo para ser compilado:
struct Biblioteca // Proviene de #include "Biblioteca.h" en main.cpp
{
};
struct Biblioteca // Proviene de #include "Biblioteca.h" en Alejandria.h
{
};
struct Alejandria
{
Biblioteca b;
};
int main()
{
Biblioteca biblioteca;
Alejandria alejandria;
return 0;
}
El cuál no compilará, porque no puedes definir dos veces el mismo objeto. Por eso se añaden las "Líneas misteriosas", que evitarían incluir de nuevo un archivo que ya ha sido incluido.