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++)