下面的 Delphi 代码是什么:
int32 *P;
int32 c0, c1, i, t;
uint8 *X;
t = P[i], c0 = X[t], c1 = X[t + 1];
坦率地说,逗号运算符让我感到困惑。下面的句子是不是错得离谱?
{$POINTERMATH ON}
var P: ^Int32; c0, c1, i, t: Int32; X: ^UInt8;
t:= P[i]; //<--?
c0:= X[t];
c1:= X[t+1];
t:= c1; //<--?
1条答案
按热度按时间dsf9zpds1#
在C语言中,逗号运算符的优先级最低,因此您的语句等效于:
然后从左到右求值。所以它等价于:
但是,如果你做了这样的事情:
则它将等价于:
因为逗号运算符“返回”它的最终操作数。
我还应该指出,因为每个逗号都是一个序列点,所以像这样的东西是定义明确的:
而这不是:
这几乎是不言而喻的:如果有人编写了像您第一个代码片段那样的产品级C代码,我将不得不打他们的屁股。