Я збираюся припустити, що онлайн-компілятори використовують GCC або сумісний компілятор. Звичайно, будь-який інший компілятор також може робити таку ж оптимізацію, але документація GCC добре пояснює, що він робить:
-faggressive-loop-optimizations
Ця опція вказує оптимізатору циклу використовувати мовні обмеження для виведення меж кількості ітерацій циклу. Це передбачає, що код циклу не викликає невизначену поведінку, наприклад, спричиняючи переповнення цілих чисел із знаком або доступ до масиву, що не має обмежень. Межі кількості ітерацій циклу використовуються для керівництва розгортанням циклу та оптимізацією вилучення та виходу з циклу. Цей параметр увімкнено за замовчуванням.
Цей варіант дозволяє лише робити припущення на основі випадків, коли UB доведено. Щоб скористатися цими припущеннями, можливо, потрібно буде ввімкнути інші оптимізації, наприклад, постійне згортання.
Підписане ціле переповнення має невизначену поведінку. Оптимізатор зміг довести, що будь-яке значення, яке iперевищує 173, спричинить UB, і оскільки він може припустити, що UB не існує, він також може припустити, що iніколи не перевищує 173. Потім він може додатково довести, що i < 300завжди відповідає дійсності, і так що стан циклу можна оптимізувати.
Чому 4169, а не якесь інше значення?
Ці веб-сайти, ймовірно, обмежують кількість вихідних рядків (або символів або байтів), які вони показують, і випадково мають однакову межу.