【问题标题】:Objective-C: Exclamation Point strcmp in "if" statementObjective-C:“if”语句中的感叹号strcmp
【发布时间】:2013-07-15 16:51:35
【问题描述】:

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

谢谢

【问题讨论】:

    标签: objective-c strcmp


    【解决方案1】:

    由于 Objective C 与 C 一样,允许在条件句中使用整数,因此使用 !exprexpr== 0 的常用简写形式。

    你的陈述相当于

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

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

    【讨论】:

    • 有道理!谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        • 1970-01-01
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 2022-01-15
        相关资源
        最近更新 更多