2013-07-15 2 views
1

Je suis à la recherche sur un code OpenGL ES multiplay matrices, mais je ne suis pas sûr de savoir comment cela fonctionne, si la déclaration:Objective-C: Point d'Exclamation strcmp dans "si"

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); 
    } 
} 

Est-ce que strcmp signifie que les chaînes sont égales ou non égales? J'ai regardé la documentation de strcmp et ça renvoie des nombres. Alors, comment ce point d'exclamation dans une instruction if affecte-t-il un nombre (étant la valeur de retour de strcmp)?

Merci

Répondre

3

Puisque l'Objective C, comme C, permet des entiers dans des conditions, l'utilisation de !expr est un raccourci commun pour expr== 0.

Votre déclaration équivaut à

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

Depuis strcmp renvoie zéro lorsque les chaînes sont égales entre elles, les contrôles de l'état si le contenu de deux chaînes C est le même.

+0

Cela a du sens! Merci! – foobar5512

0

fonction strcmp() renvoie le nombre total des différences constatées entre chaque chaîne de caractères, si un moyen de zéro, il n'y a pas de différences. C'est peu intuitif quand on y pense en termes de strcmp true/false.

Le point d'exclamation est l'opérateur 'NOT'. Cela signifie qu'il va tester si la valeur en face de lui n'est pas vrai, donc le résultat est essentiellement une inversion de la valeur booléenne d'origine.

Dans ce cas, si! Strcmp() signifie que si le résultat de strcmp est NOT> 0 alors le résultat est vrai.

0

strcmp retournera zéro lorsque les chaînes sont égales. Le point d'exclamation est l'opérateur de négation, de sorte que le programme entre l'instruction if lorsque les chaînes sont égales.