我正在查看一些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的返回值)?
由于
答案 0 :(得分:3)
由于Objective C与C一样,允许条件中的整数,因此使用!expr
是expr== 0
的常用简写。
您的陈述相当于
if (strcmp(_uniformArray[i].Name, "ModelViewProjectionMatrix") == 0) {
...
}
由于strcmp
在字符串彼此相等时返回零,因此条件检查两个C字符串的内容是否相同。
答案 1 :(得分:0)
strcmp()函数返回每个字符串之间找到的差异总数,因此零表示没有差异。当你用strcmp true / false来表达它时,它是不直观的。
感叹号是'NOT'运算符。这意味着它将测试它前面的值是否为真,因此结果基本上是原始布尔值的反转。
在这种情况下,如果!strcmp()表示strcmp的结果是否为&gt; 0然后结果为真。
答案 2 :(得分:0)
strcmp
将返回零。感叹号是否定运算符,因此程序将在字符串相等时输入if
语句。