Deux variables dans une boucle ‘for’ en C

J’écris du code où je dois utiliser deux variables dans une boucle for . Le code ci-dessous semble-t-il correct?

Cela me donne le résultat attendu.

 for (loop_1 = offset,loop_2 = (offset + 2); loop_1 >= (offset - 190),loop_2 <= (190 + offset + 2); loop_1--,loop_2++) { if ( (*(uint8_t*)(in_payload + loop_1) == get_a1_byte(bitslip)) && ((*(uint8_t*)(in_payload + loop_2) == get_a2_byte(bitslip))) ) { a1_count++; } } 

Mais je reçois un avertissement du compilateur qui dit:

fichier.c: 499: 73: avertissement: l’opérande gauche de l’expression virgule n’a aucun effet

Qu’est-ce que ça veut dire?

Le problème est la condition de test:

 loop_1 >= (offset - 190),loop_2 <= (190 + offset + 2) 

Cela ne vérifie pas les deux parties. (Eh bien, si, mais seul le résultat de la deuxième partie est utilisé.)

Le changer en

 (loop_1 >= (offset - 190)) && (loop_2 <= (190 + offset + 2)) 

si vous voulez que les deux conditions soient vérifiées.

Mat est correct, mais vous devriez probablement envisager de simplifier votre code pour:

 for (i = 0; i <= 190; i++) { uint8_t *pl1 = (uint8_t *)(in_payload + offset - i); uint8_t *pl2 = (uint8_t *)(in_payload + offset + i + 2); if (*pl1 == get_a1_byte(bitslip) && *pl2 == get_a2_byte(bitslip)) { a1_count++; } } 

(Vous pouvez évidemment in_payload + offset le calcul de in_payload + offset , mais l'optimiseur le fera presque certainement pour vous).

Voir la réponse de caf pour vos problèmes sémantiques. Essayez d’abord de bien comprendre vos pensées avant de commencer à taper.

Un malentendu est que vous mélangez deux concepts différents de C, l’initialisation et l’affectation. Évidemment, dans votre code, vous pensez à une initialisation où la chose avec la virgule fonctionnerait parfaitement. Donc, la prochaine fois que vous rencontrez un problème similaire, utilisez simplement des variables locales. Ce sont des constructions valables dans C99, et une bonne chose à utiliser, de toute façon.

Vous ne nous avez pas size_t le type des variables, mais en supposant que size_t votre déclaration for ressemblerait à

 for (size_t loop_1 = offset, loop_2 = (offset + 2); loop_1 >= (offset - 190) && loop_2 <= (190 + offset + 2); loop_1--, loop_2++)