Supongamos que tengo el siguiente código (literalmente) en un archivo fuente en C++:Abolir incluir archivos en C++
// #include <iostream> // superfluous, commented-out
using std::cout;
using std::endl;
int main()
{
cout << "Hello World" << endl;
return 0;
}
puedo compilar este código, aunque #include <iostream>
es comentado de salida:
g++ -include my_cpp_std_lib_hack source.cpp
Cuando
my_cpp_std_lib_hack es un archivo en un sitio central que incluye todos los archivos de la biblioteca de C++ estándar:
#include <ciso646>
#include <climits>
#include <clocale>
...
#include <valarray>
#include <vector>
Por supuesto, puedo usar opciones de compilación adecuadas para todos los compiladores que me interesan (como MS Visual Studio y tal vez algunos otros), y también uso encabezados precompilados.
El uso de un truco como me da las siguientes ventajas:
- compilación rápida (porque toda la biblioteca estándar es precompilado)
- No hay necesidad de añadir
#include
s cuando todo lo que quiero es añadir un poco de salida de depuración - No hay necesidad de recordar o mirar hacia arriba todo el tiempo dónde diablos
std::max
se declara - Una sensación de que el TEL está mágicamente integrado en el lenguaje
Así que me pregunto: ¿estoy haciendo algo muy mal aquí?
¿Se romperá este truco al escribir grandes proyectos?
Tal vez todos los demás ya lo usan y nadie me lo dijo?
¿Qué pasa si hay dos encabezados que definen algo con el mismo nombre? – Cameron
Sinceramente odio lo que has hecho, pero estoy votando tu pregunta porque realmente quiero ver respuestas sobre por qué exactamente es horrible –
En realidad, en cierto modo, tiendes a terminar haciendo esto en Visual C++. Es como funcionan los encabezados precompilados. OK - stdafx.h está explícitamente incluido (a diferencia de este hack de compilación de opciones), pero sigue siendo básicamente una gran lista de todo lo que necesita en cualquier lugar, aunque la mayoría no es necesaria en la mayoría de los lugares. Como resultado, un pequeño cambio en un encabezado tiende a significar una gran reconstrucción, ya que todo tiene una dependencia de compilación en stdafx.h. Tipo de derrotas el punto, realmente. – Steve314