2012-04-30 6 views
11

この欠落している括弧は、Delphiコンパイラが無視するのはなぜですか?コンパイラは終了コマンドの括弧がなくなっても無視します

function Test: Boolean; 
begin 
    Exit(True; // <-- eek! it compiles... 
end; 

私は私のコードの一部は、このように見えたし、最初のDelphiは私のユニットを無視することを考えた - しかし、それだけで構文エラーのこのタイプを無視します。だから今私はなぜその理由を知りたいのですか。

+5

これはコンパイラのバグのようです。 –

+0

XE2アップデート4と同じです。エラーインサイトはそれをマークします。 –

+0

私の推測では、関数には何も含まれていないので、関数自体は無視されます。出口の前にいくつかのコードを追加してみてください。 – CyprUS

答えて

1

Exitは、それ自体トークンとみなされています。Exitは、(とにかくこれらの命令を実行できないため)コンパイラによって単純に無視された後、同じスコープ内で定義されたものです。

+0

'Exit(True;)の後に命令を追加すると、コンパイラは「E2066 Missing operator or Semicolon」(Delphi XE)を再度苦情にします。 –

+0

これは、セミコロンがコンパイラに次の命令をコンパイルするように促すためです。 – LaKraven

+0

本質的には、「Exit」は「絶対」のトークンであり、セカンダリがセカンダリになるまで同じステートメントの後続の文字を無視するように促しています。 奇抜な、確かに...そして興味深い発見! – LaKraven

0

1. Exitは単独であるか、 です。2.カッコ()のセットを持つExitがあります。 #2が見つからない場合は#1に進みます。

関連する問題