Может ли компилятор компилировать код без расширения? - PullRequest
2 голосов
/ 22 ноября 2010

Это случайный вопрос, который возник у меня, очевидно, я не хотел бы делать это, потому что это плохая практика, но возможно ли скомпилировать и запустить код из файла без расширения?Работает ли это с c, c ++, java, python, любыми языками?Если это так, то является ли расширение скорее свойством стилиста или у него есть цель для чего-то еще?

Ответы [ 4 ]

5 голосов
/ 22 ноября 2010

Расширение ничего не значит.Просто способ помочь вам отследить, какой файл есть что.(также помогает материал, такой как GUI Explorer, открыть файл в нужной программе.).

4 голосов
/ 22 ноября 2010

Это зависит больше от используемого компилятора, чем от языка. Например. В gcc / g ++ есть параметр командной строки -x <language>, который позволяет переопределить обнаружение на основе расширения файла. Один вариант использования использует - (т.е. стандартный ввод) в качестве ввода.

3 голосов
/ 22 ноября 2010

Это действительно зависит от компилятора.Например, я мог бы представить, что есть диспетчеры компиляторов C / C ++, которые делают некоторые предположения на основе файла, оканчивающегося на .c или .cpp, но также могут быть параметры командной строки, чтобы явно указать, как должен обрабатываться файл.

1 голос
/ 23 ноября 2010

Многие компиляторы могут принимать файлы разных типов в сборке и использовать расширение файла, чтобы определить, что с ним делать.Например, можно сказать:

acmecompile foo.c bar.c fred.cpp wow.asm lib1.lib compilething.obj -o result.exe

Он будет использовать расширения различных файлов, чтобы определить, что первые два следует передавать через компилятор C, а следующие - через компилятор C ++, иследующий через ассемблер.Последние два должны быть переданы непосредственно компоновщику.

Часто будут какие-то средства сообщать компилятору, что конкретный файл должен обрабатываться определенным образом, независимо от его расширения;например, иногда может быть желательно, чтобы некоторые файлы в многоцелевом приложении компилировались как C для некоторых целей и C ++ для других (в одном из моих проектов основная цель встроена в C и использует аппаратные регистры ввода / вывода;другая цель, созданная на C ++, заменяет эти регистры свойствами).

...