Je vais supposer que le site de l'compilateurs GCC ou compatible compilateur. Bien sûr, tout autre compilateur est également autorisé à faire la même optimisation, mais GCC documentation explique bien ce qu'il fait:
-faggressive-loop-optimizations
Cette option indique la boucle optimiseur d'utiliser les contraintes de la langue pour dériver des valeurs limites pour le nombre d'itérations d'une boucle. Cela suppose que la boucle de code ne pas se prévaloir d'un comportement indéfini, par exemple, en provoquant signé des débordements d'entiers ou hors limites, accès à des tableaux. Les limites pour le nombre d'itérations d'une boucle sont utilisés pour guider le déroulement de la boucle et de l'épluchage et de sortie de boucle de test optimisations. Cette option est activée par défaut.
Cette option permet simplement de faire des hypothèses sur la base de cas où l'AC est prouvé. Pour profiter de ces hypothèses, d'autres optimisations peuvent avoir besoin d'être activé, comme le pliage de constante.
Signé débordement d'entier a un comportement indéterminé. L'optimiseur a été en mesure de prouver que toute valeur de i
de plus de 173 serait la cause de l'AC, et parce qu'il peut supposer qu'il n'y est pas de l'AC, il peut aussi supposer que i
n'est jamais plus grande que 173. Il peut alors prouver que i < 300
est toujours vrai, et donc la condition de la boucle peut être optimisé à l'écart.
Pourquoi 4169 et pas une autre valeur?
Ces sites probablement limiter le nombre de lignes de sortie (ou de caractères ou d'octets) qu'ils montrent et partagent la même limite.