Ίσως κάποια "βελτιστοποίηση" (ουσιαστικά, αποφυγή επανυπολογισμού) να συμβαίνει αν το N έχει δηλωθεί ως const
ή είναι defined κατά το pre-compilation (δηλαδή είναι μια σταθερή έκφραση -- επομένως δεν χρειάζεται και υπολογισμό, απλά διάβασμα).
Κατά τα άλλα, αν το Ν είναι μια μεταβλητή, το "όριο" του for loop θα μεταβάλεται σύμφωνα με το expression στο οποίο συμμετέχει το Ν, και το όριο αυτό θα υπολογίζεται κάθε φορά.
Αν γνωρίζεις πως το όριο θα μείνει σταθερό και δεν μεταβάλλεται δυναμικά, είναι καλή πρακτική να σώσεις όπως λες την τιμή (πχ σε μια const
μεταβλητή) και να τρέξεις το for loop σύμφωνα με αυτή. Αμφιβάλλω για το αν υπάρχει optimisation pass που κάνει κάτι σαν "tracking" του αν άλλαξε μια μεταβλητή στο σώμα της for ή οχι.
Για να δείς τον κώδικά σου μετά από κάποιο optimisation μπορείς ίσως να ρίξεις μια ματιά στην Assembly που παράγει ο compiler (δεν ξέρω πόσο κατανοητή θα είναι).
Πάντως είμαι σχεδόν σίγουρος πως δεν μπορείς να δείς τον βελτιστοποιημένο κώδικα, καθώς τα optimisation passes γίνονται αφού ο κώδικας μετατραπεί σε AST μορφή (ουσιαστικά δεν είναι κώδικας πλέον -- περισσότερα στους compilers 8ου εξαμήνου).