Tijdens het schrijven van een vrij simpel programma in C++ liep ik net tegen een voor mij nieuwe situatie aan, die ik het best kan illustreren met een heel kort (niet-representatief) codefragment:
De bovenstaande code is een oneindige loop, omdat 'index' nooit (UINT8_MAX + 1) kan worden en wrapt voordat de for-test 'false' kan geven. Is er een manier om een loop te schrijven die alle waarden van een datatype langsloopt en een index-variabele heeft van het datatype zelf?
Voor zover ik kan nagaan, zou een while of do/while loop dezelfde problemen houden en de enige oplossing die ik kan bedenken is om van 'index' een ander datatype zoals uint16_t of uint32_t te maken.
Omdat ik eigenlijk wil voorkomen dat ik veel heen-en-weer ga casten tussen kleinere en grote datatypes, vroeg ik me af of er een leesbare en simpele oplossing voor dit probleem is? Zoeken op termen als 'C++ loop over full range of data type' levert niet zo snel wat bruikbaars op bij mij.
C++:
1
2
3
4
5
6
7
| #include <stdint.h> int main(int argc, char** argv) { for (uint8_t index = 0; index <= UINT8_MAX; index++) { processUInt8(index); } } |
De bovenstaande code is een oneindige loop, omdat 'index' nooit (UINT8_MAX + 1) kan worden en wrapt voordat de for-test 'false' kan geven. Is er een manier om een loop te schrijven die alle waarden van een datatype langsloopt en een index-variabele heeft van het datatype zelf?
Voor zover ik kan nagaan, zou een while of do/while loop dezelfde problemen houden en de enige oplossing die ik kan bedenken is om van 'index' een ander datatype zoals uint16_t of uint32_t te maken.
Omdat ik eigenlijk wil voorkomen dat ik veel heen-en-weer ga casten tussen kleinere en grote datatypes, vroeg ik me af of er een leesbare en simpele oplossing voor dit probleem is? Zoeken op termen als 'C++ loop over full range of data type' levert niet zo snel wat bruikbaars op bij mij.
Remember, if you have any trouble you can always send a telegram to the Right People.