C 代码(带逗号运算符)到 Delphi

标签 c delphi comma-operator

以下 C 中等效的 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;     //<--?

最佳答案

C 中的逗号运算符具有尽可能低的优先级。所以你的陈述等同于:

(t = P[i]), (c0 = X[t]), (c1 = X[t + 1]);

然后从左到右计算。所以它等同于:

t = P[i];
c0 = X[t];
c1 = X[t + 1];

但是,如果你做了这样的事情:

z = (a = b, c = d);

那么它就等同于:

a = b;
c = d;
z = c;

因为逗号运算符“返回”它的最终操作数。

我还应该指出,因为每个逗号都是一个序列点,所以像这样的东西是明确定义的:

i = i + 1, i++, --i;

这里不是:

i = i + i++ - --i;


这几乎是不言而喻的:如果有人像您的第一个代码片段那样编写生产 C 代码,我将不得不打他们的屁股。

关于C 代码(带逗号运算符)到 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9190158/

相关文章:

c - 将两根绳子放在一起

c - 是否有 GCC 关键字允许结构重新排序?

c++ - 逗号作为变量初始化中的分隔符(不是作为运算符)

mysql - dbexpress 的 DBxmys.dll 缺失错误

delphi - 这里的 "Missing SQL property"是什么?

c++ - 在一行中删除多个指针。 C++

c++ - c++中的逗号运算符不计算第二个表达式

c - avr中的内联汇编

c - fopen 没有给出错误,但文件保持为空

delphi - Delphi如何在不聚焦的情况下从键盘获取输入