Пожалуйста, обратите внимание на: https://godbolt.org/z/WGBP8D
Код:
size_t n;
scanf("%d", &n);
fprintf(stderr, "(1 <= %d) == %d\n", n, 1 <= n);
fprintf(stderr, "(%d <= 1000) == %d\n", n, n <= 1000);
fprintf(stderr, "%d\n", 2 <= 1000);
ASSERT(1 <= n && n <= 1000);
Ввод установлен на:
2
1
2
Вывод:
(1 <= 2) == 1
(2 <= 1000) == 0
1
Assertion failed: 1 <= n && n <= 1000
Закомментирование дальнейшей части кода изменяет поведение приведенного выше фрагмента. Как это?
Забавно, любая активированная оптимизация (-O1
) работает хорошо, но никакая оптимизация (-O0
или не указано) делает это ... Ну, я даже не знаю как чтобы понять это.