我通常是一名C#程序员,去德尔福已经充满了“有趣”的发现。让我感到困惑的是德尔福的单一陈述。
示例C#block
if(x)
Foo();
else
Bar();
示例Delphi块:
if x then
Foo() //note missing semicolon
else
Bar();
他们要求分号不在那里的目的究竟是什么?有没有可以追溯到Pascal的历史原因?
答案 0 :(得分:31)
Pascal和C中的分号及其衍生物之间存在差异。
Wikipedia解释了这个含义:
这种差异主要表现在两种情况:
- Pascal中的其他内容永远不会有分号 而它在C中是强制性的(除非使用了块语句)
- 不需要在结束之前的最后一个语句 分号
一个多余的分号可以在结尾前放在最后一行, 从而正式插入空白的陈述。
答案 1 :(得分:27)
if-then ;
前面不允许else
的真正原因是为了避免与其鲜为人知的堂兄,案例 - 的歧义 else
。
观察以下摘录。
case enum1 of
male: writeln('hallo');
female: if a=1 then writeln('oops'); <<-- watch this space.
else writeln('neither')
end;
因为在oops行之后有;
,所以else属于case语句而不是if。
如果您遗漏;
,则其他人属于a = 1 if
。
这就是为什么;
我个人在Pascal工作了大约20多年,我仍然把if
放在其他人面前,因为我把;
置于C风格。并且编译器仍然让我感到烦恼,你认为编译器现在已经学会了。