C中’for’循环中的两个变量

我正在编写一些代码,我需要在for循环中使用两个变量。 以下代码似乎没问题吗?

它确实给了我预期的结果。

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

但我得到一个编译器警告说:

file.c:499:73:警告:逗号表达式的左侧操作数无效

这是什么意思?

问题是测试条件:

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

这不会检查两个部分。 (嗯,确实如此,但只使用了第二部分的结果。)

将其更改为

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

如果你想要检查两个条件。

Mat是正确的,但您应该考虑将代码简化为:

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

(你显然可以将in_payload + offset的计算提升到循环之外,但优化器几乎肯定会为你做这个)。

对于你的语义问题,请参阅caf的答案。 首先尝试在开始输入之前直截了当地思考。

一个误解是你混淆了C,初始化和赋值这两个不同的概念。 很明显,在你的代码中,你正在考虑初始化,其中带有逗号的东西可以完美地工作。 因此,下次遇到类似问题时,只需使用局部变量即可。 这些都是C99中的有效构造,无论如何都是一件好事。

你没有给我们变量的类型,但假设size_t你的for语句看起来像

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