Предположим, что у меня есть следующий код (буквально) в исходном файле С++:
// #include <iostream> // superfluous, commented-out
using std::cout;
using std::endl;
int main()
{
cout << "Hello World" << endl;
return 0;
}
Я могу скомпилировать этот код, даже если #include <iostream>
закомментирован:
g++ -include my_cpp_std_lib_hack source.cpp
Где my_cpp_std_lib_hack - это файл в некотором центральном месте, который включает в себя все файлы стандартной библиотеки С++:
#include <ciso646>
#include <climits>
#include <clocale>
...
#include <valarray>
#include <vector>
Конечно, я могу использовать правильные параметры компиляции для всех компиляторов, которым я забочусь (это MS Visual Studio и, возможно, несколько других), и я также использую предварительно скомпилированные заголовки.
Использование такого взлома дает мне следующие преимущества:
- Быстрая компиляция (поскольку вся стандартная библиотека предварительно скомпилирована)
- Не нужно добавлять
#include
, когда все, что я хочу, добавляет некоторый вывод отладки - Не нужно запоминать или искать все время, когда объявлен черт
std::max
- Чувство, что STL волшебным образом встроен в язык
Так что я удивляюсь: я делаю что-то очень неправильное здесь?
Будет ли этот хак сломаться при написании больших проектов?
Может быть, все остальные уже используют это, и никто мне не сказал?