C/C++のように、プログラムは先にプリプロセッサにファイル&を実行してマクロ展開を実行します。その後、コンパイラに渡してコードをアセンブリ形式に変換してプロセスを実行します。しかしJavaではプリプロセッサの使用法を参照してください。なぜ、なぜプリプロセッサが通常処理するすべてのタスクを担当するのですか?なぜPreproccessorはC&C++のようなJavaプログラムの一部ではないのですか?
2
A
答えて
3
プリプロセッサは、Javaのコンパイル処理の必要なステップではありません。
C/C++では、異なるファイルに格納されている関数は他のファイルに "インクルード"されているため、基本的にはコピーされてドキュメント全体に貼り付けられます。当時のハードウェア機能を考えれば、当時はこれはかなり良いアイデアでしたが、現代の言語では「シンボリック・インポート」と呼ばれるものが使用されています。
シンボリックインポートでは、テキストを直接使用するのではなく、別のファイルでシンボルを検索します。 Javaでは、これは定数またはクラスのインポートを伴うことがあります。これらのインポートは、他のファイルのコードへの参照として機能します。したがって、プリプロセッサにコードをコピー&ペーストして最終的にどのファイルがどのファイルに属しているかを把握する必要がなくなり、Javaはこれらのインポートをセマンティックレベルで直接行うことができます。
これは、プリプロセッサを言語のコンパイル処理に不要にするため、他の理由も削除されています。
関連する問題
- 1. C++がトポロジカルソートでJavaより遅いのはなぜですか?
- 2. C#がコマンドライン引数の一部をエスケープしないように見えるのはなぜですか?
- 3. なぜXPath式はC#で結果を返さないが、C#の外で行うのはなぜですか?
- 4. smartassemblyのようなプログラムですがC++のプログラムですか?
- 5. C/C++に|| =演算子がないのはなぜですか?
- 6. FSharpOptionの一部のプロパティ(IsSomeやIsNoneなど)がC#から見えないのはなぜですか?
- 7. HangManのようなC#プログラム
- 8. なぜこのCプログラムはクラッシュするのですか?
- 9. なぜこのようなCプログラムの出力?
- 10. このプログラムのエラーはなぜC++ですか?
- 11. 一般的なC#WeakEventリスナーが機能しないのはなぜですか?
- 12. なぜ、c#のキーワードではないのですか?
- 13. なぜC#のMath.Min/Max変数ではないのですか?
- 14. C#でSeleniumの 'WebElement'クラスがないのはなぜですか?
- 15. なぜ私のシンプルなC++は "あなたの名前は何ですか?"プログラムが動作していない?
- 16. C#(かなり遅い)とWin32/Cのパフォーマンスの違いはなぜですか?
- 17. C/C++にセミコロンが必要なのはなぜですか?
- 18. Typescriptでデコレータと言うのはなぜですか?なぜアノテーション(javaのような)や属性(C#のような)
- 19. この小さなCプログラムがクラッシュするのはなぜですか?
- 20. この単純なCプログラムがハングアップするのはなぜですか?
- 21. なぜC#CreateObjectはVB.NETよりも冗長なのですか?
- 22. C++ 0x rvalueリファレンスがデフォルトでないのはなぜですか?
- 23. Cでfree()が動作しないのはなぜですか?
- 24. C/C++では空の式が合法なのはなぜですか?
- 25. C#:System.Windows.Formsのアプリケーションはなぜですか?
- 26. なぜこのC++スタティックシングルトンは止まらないのですか?
- 27. 私のC#にSystem.ServiceProcessライブラリがないのはなぜですか?
- 28. $ .namespace()がコアjQuery実装の一部ではないのはなぜですか?
- 29. javascriptがプロジェクトアーキテクチャの一部ではないのはなぜですか?
- 30. メソッドString.indexOfがインタフェースCharSequenceの一部ではないのはなぜですか?
Sir、意味レベルとは何ですか?私にそれのアイデアを教えてください。 –
コンパイラは、テキスト(入力)、トークン(数字やキーワードなどの意味を持つビットとピース)と、これらのトークンの解析ツリー(どのコードがifステートメント)。意味レベルでコードを見ると、構造化された(構文解析されている)ことがわかり、その中の各シンボルが何を意味するのかを知ることができます。したがって、どの定数が定義されているか、どのクラスがそこにあるかなどを見ることができます。このレベルでコードを分析することは、平文を見るのではなくコードの意味と構造を見ているレベル(...)で作業しているため、意味レベルと呼ばれます( – Bartvbl
(続き))。コンパイルされるコードの意図、意味、構造が分かっているので、ここでは型チェックや最適化など、コンパイラの他の任務を果たすことができます。 – Bartvbl