2

我正在查看一些用于多重播放矩阵的 OpenGL ES 代码,但我不确定这个 if 语句是如何工作的:

for (int i = 0; i <_uniformArraySize; i++) {
    **if (!strcmp(_uniformArray[i].Name, "ModelViewProjectionMatrix")) {**

        GLKMatrix4 modelViewProjectionMatrix = GLKMatrix4Multiply(_projectionMatrix, _modelViewMatrix);
glUniformMatrix4fv(_uniformArray[i].Location, 1, GL_FALSE, modelViewProjectionMatrix.m);
    }
}

!strcmp 是否意味着字符串相等或不相等?我查看了 strcmp 文档,它返回数字。那么 if 语句中的这个感叹号如何影响一个数字(作为 strcmp 的返回值)?

谢谢

4

3 回答 3

3

由于 Objective C 和 C 一样,允许在条件句中使用整数,因此 using!exprexpr== 0.

你的陈述相当于

if (strcmp(_uniformArray[i].Name, "ModelViewProjectionMatrix") == 0) {
    ...
}

由于strcmp字符串相等时返回零,因此条件检查两个 C 字符串的内容是否相同。

于 2013-07-15T16:53:49.293 回答
0

strcmp() 函数返回在每个字符串之间找到的差异总数,因此零表示没有差异。当您根据 strcmp true/false 来考虑它时,这有点不直观。

感叹号是“NOT”运算符。这意味着它将测试它前面的值是否为NOT,因此结果本质上是原始布尔值的反转。

在这种情况下,如果 !strcmp() 表示如果 strcmp 的结果不 > 0,则结​​果为真。

于 2013-07-15T16:53:40.853 回答
0

strcmp当字符串相等时将返回零。感叹号是否定运算符,因此程序将if在字符串相等时进入语句。

于 2013-07-15T16:57:30.120 回答