我目前正在移植經典Moria遊戲的VMS Pascal版本,但我不確定是否理解if/then語句的限制(我從未編程過帕斯卡之前)。Pascal:理解if/then語句
我的理解到目前爲止,沒有開始/結束,然後if/then塊只包含一個後面的語句。如果是這種情況,那麼在下面的代碼中;
if (i4 > 0) then
with inventory[i4] do
begin
objdes(out_val,i4,false);
msg_print('Your ' + out_val + ' glows faintly!');
if (enchant(toac)) then
begin
flags := uand(%X'7FFFFFFF',flags);
py_bonuses(blank_treasure,0);
end
else
msg_print('The enchantment fails...');
end;
ident := true;
的ident := true;
將是if (tval > 0) then
塊之外,也就是說即使i4
是0
,ident
仍然會被設置爲true
。
如果這是正確的,那麼它是否意味着來自UMoria(C端口)的以下代碼是錯誤的?
i_ptr = &inventory[INVEN_WIELD];
if (i_ptr->tval != TV_NOTHING) {
objdes(tmp_str, i_ptr, FALSE);
(void) sprintf(out_val, "Your %s glows faintly!", tmp_str);
msg_print(out_val);
if (enchant(&i_ptr->tohit, 10))
{
i_ptr->flags &= ~TR_CURSED;
calc_bonuses();
}
else
msg_print("The enchantment fails.");
ident = TRUE;
}
...因爲ident = TRUE;
位於if塊內部。
我在幾個地方看到過類似的例子 - 我想這可能是因爲C端口而改變的 - 但我希望在改變太多代碼之前弄清楚。
感謝Chris,我看了一下FreePascal自動格式化器,它非常好,但肯定不是很完美(也許是因爲這是VM Pascal),但是有一些代碼部分我們肯定是不對的。 –