Objective-C:"if"语句中的感叹号 strcmp



我正在研究一些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的返回值)的呢?

感谢

由于目标C和C一样,允许在条件句中使用整数,因此使用!exprexpr== 0的常用缩写。

你的声明相当于

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

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

strcmp()函数返回每个字符串之间的差异总数,因此零表示没有差异。当你用strcmp-true/false来看待它时,这有点不直观。

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

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

当字符串相等时,

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

最新更新