warning: l’opérande gauche de l’expression virgule n’a aucun effet

Je vois cet avertissement Comment y remédier?

Temp += (Table[i, temp3] - (MSB[i] ^ 0x1)); 

warning: l’opérande gauche de l’expression virgule n’a aucun effet

qu’est-ce que l’object table? Si c’est un tableau à 2 dimensions, alors vous devriez écrire

 Table[i][temp3] 

Dans votre code

 [i, temp3] 

est un opérateur de virgule – il évalue le premier paramètre (i), l’ignore et renvoie temp3. Vous pouvez donc simplement supprimer i si Table est une sorte de conteneur qui accepte un index unique pour accéder à ses objects.

Mauvaise syntaxe – si Table est un Table deux dimensions, utilisez Table[i][temp3] .

L’opérateur de virgule évalue un nombre quelconque d’expressions de gauche à droite et donne la valeur de l’expression la plus à droite.

Vous avez une virgule dans le Table[i, temp3] , ce qui revient exactement à faire le Table[temp3] . Avez-vous essayé de faire le Table[i][temp3] pour accéder à une position dans un tableau bidimensionnel?

edit : J’expliquerai un peu plus, cela peut vous être utile. Je ne serai pas précis à 100%, c’est juste pour vous donner une idée de ce qui se passe.

Pourquoi devez-vous utiliser deux paires de crochets pour accéder à une “cellule” dans votre “tableau”? Avec les tableaux unidimensionnels, array[i] déposera sur le i-ème élément du tableau, n’est-ce pas? Eh bien, avec un tableau à deux dimensions, appelons-le tableau comme vous l’avez fait, table[i] dirigera également sur le i-ème élément. Cette fois, cependant, cet élément est un autre tableau: la i-ème ligne entière de la table.

Donc, si la table[i] est une ligne de la table, qui est juste un autre tableau, comment accéder à la colonne j? Eh bien, vous devez aller à la row[j] , qui est la table[i][j] .

Les tableaux multidimensionnels en C sont des “tableaux de tableaux”.

Qu’entendez-vous par i, temp3 ? Si Table est un tableau 2D, accédez à l’élément (i, temp3) avec la Table[i][temp3] .

Edit: Depuis que j’ai été assez lent pour être battu par plusieurs réponses, je vais append quelque chose pour que ma réponse ne soit pas simplement une copie des réponses précédentes: que signifie vraiment ” i, temp3 “? Eh bien, la norme C99 explique:

“L’opérande gauche d’un opérateur de virgule est évalué comme une expression vide; il y a un sharepoint séquence après son évaluation. Ensuite, l’opérande droit est évalué; le résultat a son type et sa valeur.97) Si l’on tente de modifier le résultat d’opérateur par virgule ou d’y accéder après le sharepoint séquence suivant, le comportement est indéfini. ”

Donc, Table[i, temp3] signifie “évaluez i, puis accédez au numéro d’élément temp3 dans Table . Ainsi, le compilateur vous avertit que le i ne fait rien (car évaluer i ne produit aucun effet secondaire).