Objective c 目标C:感叹号strcmp在“中”;如果;陈述

Objective c 目标C:感叹号strcmp在“中”;如果;陈述,objective-c,strcmp,Objective C,Strcmp,我正在查看一些OpenGL ES代码以生成多个矩阵,但我不确定该if语句是如何工作的: for (int i = 0; i <_uniformArraySize; i++) { **if (!strcmp(_uniformArray[i].Name, "ModelViewProjectionMatrix")) {** GLKMatrix4 modelViewProjectionMatrix = GLKMatrix4Multiply(_projectionMatri

我正在查看一些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);
    }
}
for(int i=0;istrcmp()函数返回每个字符串之间发现的差异总数,因此零表示没有差异。从strcmp true/false的角度来看,这有点不直观

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


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

因为目标C与C一样,允许条件中的整数,使用
!expr
expr==0
的常用缩写

你的陈述相当于

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

因为当字符串彼此相等时返回零,所以条件检查两个C字符串的内容是否相同。

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

这很有意义!谢谢!