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

标签 objective-c 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 的返回值)呢?

谢谢

最佳答案

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

您的陈述相当于

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

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

关于Objective-C: "if"语句中的感叹号 strcmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17659539/

相关文章:

objective-c - CoreData逆向问题

ios - 处理游戏进入后台

C:比较结构中的两个字符串

使用 strcmp 和嵌套循环检查数组的值

c - 检测 C 中的空标记

ios - 当页面更改时,我的 UIPageViewController 中的下一页仅部分加载

objective-c - 在 NSMutableArray : Why it doesn't work? 中获取字符串

ios - 带有 "Release: Fastest, Smallest [-Os]"的 Xcode 8 有一些奇怪的问题,并且在某些情况下无法正常运行

C++比较字节数组和结构的最佳方法

c++ - strcmp 无法将 ‘std::string {aka std::basic_string<char>}’ 转换为‘const char*