#c #c-preprocessor #preprocessor-directive
#c #c-препроцессор #директива препроцессора
Вопрос:
В программировании на C мы можем включать / отключать оптимизацию цикла с помощью директивы препроцессора #pragma.
В каком сценарии оптимизация цикла должна быть отключена?
Комментарии:
1. Нет, в программировании на C нет явного контроля над оптимизациями и
#pragma
поведение определяется реализацией. Может быть, вы имеете в виду MSVC или что-то в этом роде, и если это так, вам следует пометить свой вопрос как таковой…
Ответ №1:
Оптимизация отключена по умолчанию при компиляции для отладки (чтобы строки исходного кода в отладчике точно соответствовали выполняемому коду).
Вы бы использовали pragma только в очень специфических обстоятельствах, таких как:
-
Вы обнаружили ограничение оптимизации / ошибку, приводящую к неопределенному поведению (Что каждый программист C должен знать о неопределенном поведении (Благодаря @R)
-
Вам нужна точная синхронизация в реальном времени
Комментарии:
1. Скорее всего, это не ошибка оптимизации, а случай, когда ваш код вызывает UB, если код «кажется, работает» с отключенной оптимизацией.
2. Я согласен с @R. Каждый программист на C действительно должен прочитать все 3 части того, что каждый программист на C должен знать о неопределенном поведении из блога LLVM.