C++ определяет понятие «единицы перевода». Блок перевода является точкой привязки, где начинается перевод, а программа, как правило, включает в себя несколько таких единиц перевода. Какие единицы передаются компилятору, поскольку «единица перевода» на самом деле зависит от настроек в вашей среде IDE, от make-файлов и других конфигураций. Но неформально большинство конфигураций принимают ваши .cpp
и .c
- файлы как единицы перевода.
Чтобы сделать это проще, мы можем думать о модуле перевода, как о ком-то, из которого компилятор создает двоичный код, а компоновщик объединяет несколько двоичных файлов, а затем в программу.
Так что заголовочные файлы обычно не настроены как единицы перевода, и они обычно не дают двоичный файл самостоятельно, даже если они содержат исходный код. Они скорее думают о том, что они будут импортированы из единиц перевода и будут скомпилированы вместе с ними.
Если такие файлы заголовков содержат много исходного кода, который будет включен в несколько единиц перевода, имеет смысл (предварительно) скомпилировать их один раз и сохранить как можно больше информации в промежуточном результате, например что компиляция фактической единицы перевода выполняется быстрее. Это экономит время, но «промежуточное двоичное» - это нечто внутреннее и не подвергаемое.
Однако из содержимого и типа исходного кода в нем заголовочный файл не отличается от других файлов исходного кода. Вы можете передать «заголовочный файл» компилятору в качестве единицы перевода, и компилятор фактически сделает из него «нормальный» двоичный код. Это действительно так, что они обычно не объявляются корнем для компиляции.
Надеюсь, что это поможет.
Нет такой вещи, как не прекомпилированный бинарный файл, поэтому концепция «предварительно скомпилированного двоичного кода» на самом деле не является чем-то, что можно сравнить с чем-либо еще. – EJP
спасибо за указание ... Я думаю, что он должен быть вызван как предварительно скомпилированный источник – bharath