4 ms·
Similar arguments are also seen in https://graphitemaster.github.io/aau/ https://graphitemaster.github.io/aau/. When using unsigned ints for backward iteration
by reltuk 4y ago
Similar arguments are also seen in https://graphitemaster.github.io/aau/ https://graphitemaster.github.io/aau/.
When using unsigned ints for backward iteration, I'm partial to looping as:
for (i = size - 1; i < size; i--) {
...
}
since it has so much symmetry with forward iteration.
- 10000truths 4y agoI would rather just use a plain for loop and manipulate the index in the loop body: for(uint32_t i = 0; i < length; ++i) { i = (length - 1) - i; // ... } Much easier for me to understand, making it less likely to mess anything up.
- edflsafoiewq 4y agoYou'll need a new variable there, but otherwise yeah.
- WalterBright 4y agoEven easier (for D): foreach (i; 0 .. length) D takes care of selecting the correct type for `i`.
- phkahler 4y agoI'd argue that is a terrible way to write it since it depends on the rollover to terminate. Using i >= 0 is less mental work but also requires that i be signed.
- ghoward 4y agoRollover on unsigned ints is well-defined in C.
- hbn 4y agoI think their point is that it's less well defined in the average human's brain When most people see 0 - 1 they don't immediately think 11111111111111111111111111111111
- xdavidliu 4y agoif we used i >= 0 and someone were to come in and change "int i" to "unsigned i" or "size_t i", the result would be catastrophic
- Leherenn 4y agoThe same argument can be applied to GP's code with the added bonus it will cause UB at some point.
- deleted 4y ago[deleted]
- deleted 4y ago[deleted]
- JonChesterfield 4y ago`for (unsigned i = n; i-->0;) {}` Probably formatted i-- > 0. Concise and reads (once used to it anyway) something like i decrementing to zero.