これは私にとってランダムな質問ですが、悪い習慣であるので、私はそれをやりたいとは思っていませんが、拡張子なしでファイルからコードをコンパイルして実行することは可能ですか?これはc、C++、java、python、あらゆる言語で動作しますか?そうであれば、スタイリストのプロパティの拡張以上であるか、それは何かの目的を持っていますか?コンパイラは拡張機能なしでコードをコンパイルできますか?
答えて
拡張子は何も意味しません。どのファイルが何であるかを追跡するのに役立つ単なる方法です。 (GUIエクスプローラのようなものは、適切なプログラムでファイルを開くのにも役立ちます)。
(言語仕様には、ソースファイルが.javaで終わると言われていますが、ハックする方法がある可能性があるので、Javaは気にするかもしれません)。
もちろん、複数の言語を扱うコンパイラフロントエンドの方が難しいです。しかし、はい、ファイル拡張子は、多くの人々が考えるほど重要ではありません。 – delnan
これは実際にコンパイラに依存します。例えば、私は、.cまたは.cppで終わるファイルに基づいていくつかの仮定を行うC/C++コンパイラディスパッチャがあると考えていますが、ファイルの処理方法を明示的に指定するコマンドラインオプションもあります。
これは、言語よりも使用されるコンパイラによって異なります。例えば。 gcc/g ++には、ファイル拡張子に基づいて検出を無効にするコマンドラインオプション-x <language>
があります。ユースケースの1つは-
(すなわちstdin)を入力として使用しています。
ファイルが必要ない場合は、どのように拡張機能が必要ですか? :) – BCS
多くのコンパイラでは、ビルド内で複数の種類のファイルを受け入れることができ、ファイルの拡張子を使用してファイルの処理方法を決定できます。例えば、1が言うことができるかもしれない:
acmecompile foo.c bar.c fred.cpp wow.asm lib1.lib compilething.obj -o result.exe
それは、最初の二つはCコンパイラを介して供給されなければならないことを決定するためにさまざまなファイルの拡張子を使用してC++コンパイラによって、次、次のでしょうアセンブラを介して。最後の2つはリンカーに直接供給する必要があります。
多くの場合、特定のファイルをその拡張子に関係なく特定の方法で処理する必要があることをコンパイラに伝える手段があります。たとえば、マルチターゲットアプリケーションの一部のファイルは、一部のターゲットではC、他のものではC++としてコンパイルすることが望ましい場合があります(プロジェクトの1つで、プライマリターゲットはCで構築され、ハードウェアI/Oレジスタを使用します。 C++でビルドされた別のターゲットは、それらのレジスタをプロパティに置き換えます)。
ファイル拡張子は何も意味しません。 .jpgの終わりのHTMLファイルに名前を付けることができます。ディスク上のデータだけです。ソフトウェアがデータをどのように解釈するかが重要です。 –