相当于Python的for循环范围



我最近才开始用C编程,我想看看是否有一个非排他范围的联合的标准实现(最好不使用额外的库),就像在Python中一样。

我正在寻找以下C等效(在Python中):

for k in (range(-1, 2) + range(i-1, i+2)):

定义一个包含这些范围的元素的数组是不够的,因为数组的大小取决于两个范围的交集(取决于i)。我最好的选择是什么?

可以使用两个循环:

for (k = -1; k < 2; ++k) {
  do_stuff(k);
}
for (k = i - 1; k < i + 2; ++k) {
  do_stuff(k);
}

或者,在C99中:

int indices[] = {-1, 0, 1, i - 1, i, i + 1};
for (int j = 0; j < 6; ++j) {
  int k = indices[j];
  // ...
}

问题说:

取决于两个范围的交集(取决于i),数组的大小。

问题中的代码不是这样工作的。如果两个范围相交,则代码在相交的值上迭代两次。这里给出的C代码模拟了这个

最新更新