我正在将用C编写的代码转换为Pascal。我对一个似乎很简单但产生疑问的部分表示怀疑!
int Length = ...;
void *FileBase = ...;
if (Length && FileBase != NULL)
....
上面一行的条件是“if”,它的意思是“长度”和“文件库”分别不同于“0”和“空”?
与 if(长度<> 0)和(FileBase<> Nil)然后 ???
相同答案 0 :(得分:2)
这不是真正的Delphi或Pascal问题。这是关于C中运算符优先级的问题。有许多引用会告诉你这一点。例如:http://en.cppreference.com/w/c/language/operator_precedence。
关键是!=
的优先级高于&&
。所以表达式
Length && FileBase != NULL
与
具有相同的含义Length && (FileBase != NULL)
因为在C值中如果它们非零则被认为是真的,在Delphi / Pascal中这个表达式将是:
(Length <> 0) and (FileBase <> nil)
答案 1 :(得分:1)
你是对的 - 它应该被翻译为if (Length <> 0) and (FileBase <> nil)
。