Duh, excellent question! Does Felix support break/continue? Implementing them correctly might affect how you approach things.
My C approach would start thus:
for(int i = 0; i<len(a); i++) { // do stuff }
As you have noted, this breaks when a hits the int limit. A possible answer is to check before the increment, so we avoid increments that overflow, but we need to check before the increment, because if len(a) == 0, we do not want to execute the body. The following solves the problem:
id: for(int i = 0; i<len(a); i++) { // do stuff if(i == len(a) - 1) { break id; } }
, where id is a unique label. However this is inefficient, because the for check is redundant for all iterations except the first. At this step, it's tempting to use a while loop, but note that a C for loop is not exactly equivalent to a while loop, as breaks/continues work differently (wrt. to execution of the increment). The simplest transformation I can think that preserves these semantics is
if( len(a) > 0 ) { id: for(int i = 0; ; i++) { // do stuff if(i == len(a) - 1) { break id; } } }