2012-04-03 12 views
1

私はデルファイへのCからコードを変換するんだけど、私はこのコードの最後の行にこだわっている:デルファイの2つの数値を比較するにはどうすればよいですか?

BOOL is_match = FALSE; 
unsigned int temp_val; 
unsigned int prev_val = 0; 

is_match = (temp_val == val); 

私はずっとこれを変換することができます:

var 
    is_match: boolean; 
    temp_val: cardinal; 
    prev_val: cardinal; 
begin 
    is_match := false; 
    prev_val := 0; 
    is_match := ???? 
end; 

私はどのように最後の課題を記入しますか?いずれにしても

答えて

11

is_match := temp_val = val;

、私はtemp_valvalとあなたがそれを比較するときに定義されていないので、上記のコードは、実際のコードのほんの抜粋であると思います。

+0

ありがとう、完璧に.. :) – paulohr

+0

@paulohr - あなたはこの答えを受け入れる必要があります。 –

7

Cの等価比較演算子は==です。 Delphiでは同等の演算子は=です。さておき、Cの等価演算子は非常に古典的な、ハードにつながるよう

is_match := temp_val=val; 

興味深いことに、バグを発見する:

は、だから、このコードを使用する必要があります。それはこのように書きます:ここに何が起こる

if (x=0) 
    DoSomething(); 

=が代入演算子であり、そうxは、その後、テスト真実である0の値が割り当てられていることです。そしてそれはfalseを返すので、DoSomething()は決して実行されません。私はこの潜在的な混乱が、パスカルが割り当てのために:=を使用することを選択した理由の1つであると信じています。

+8

あなたは眠っていましたか? :) –

+1

もう一つの理由は、演算子 '=='が面白く見えるということです。確かに、純粋な数学では、 'a == 0ならば、固有値...'と書くのではありません。一方、数学では、新しい量を定義するときに:=がよく使用されます。 –

+2

@Andreasはい、74秒かかりましたので、私は晴れた日にはっきりとしています。 –

関連する問題