// // main.c // for_test // // Created by Taras Zakharko on 09/03/16. // Copyright © 2016 Taras Zakharko. All rights reserved. // #include int n = 5; // loop control functions int init_counter() {return(0);} int check_condition(int i) {return(i<=n);} int increment_counter(int i) {return(i+1);} // Iterator protocol typedef struct { int counter; int end; } Iterator; void init_iterator(Iterator *iter, int start, int end) { iter->counter = start; iter->end = end; } void advance_iterator(Iterator *iter) { iter->counter++; } int check_iterator(Iterator *iter) { return(iter->counter <= iter->end); } int main(int argc, const char * argv[]) { // standard loop for(int i = 0; i <= n; i++) { printf("i=%d\n", i); } // using functions for conditions for(int i = init_counter(); check_condition(i); i = increment_counter(i)) { printf("i=%d\n", i); } // using an iterator abstraction Iterator iter; for(init_iterator(&iter, 0, n);check_iterator(&iter);advance_iterator(&iter)) { printf("i=%d\n", iter.counter); } }