Многие компиляторы могут принимать файлы разных типов в сборке и использовать расширение файла, чтобы определить, что с ним делать.Например, можно сказать:
acmecompile foo.c bar.c fred.cpp wow.asm lib1.lib compilething.obj -o result.exe
Он будет использовать расширения различных файлов, чтобы определить, что первые два следует передавать через компилятор C, а следующие - через компилятор C ++, иследующий через ассемблер.Последние два должны быть переданы непосредственно компоновщику.
Часто будут какие-то средства сообщать компилятору, что конкретный файл должен обрабатываться определенным образом, независимо от его расширения;например, иногда может быть желательно, чтобы некоторые файлы в многоцелевом приложении компилировались как C для некоторых целей и C ++ для других (в одном из моих проектов основная цель встроена в C и использует аппаратные регистры ввода / вывода;другая цель, созданная на C ++, заменяет эти регистры свойствами).