Эксперт не вылетает при делении на 0. - страница 2

 

Надо скомпилировать эксперта без оптимизации, тогда при 1/0 сломается

ПКМ по эксперту -> Новый проект из исходного файла -> снять галочку "Максимальная оптимизация"

 
Malik Arykov #:

Надо скомпилировать эксперта без оптимизации, тогда при 1/0 сломается

ПКМ по эксперту -> Новый проект из исходного файла -> снять галочку "Максимальная оптимизация"

А ещё неплохо было бы понимать следствия неявного преобразования типов данных. 

Для гурманов. 

 
Алексей Тарабанов #:

А ещё неплохо было бы понимать следствия неявного преобразования типов данных. 

Для гурманов. 

Не понятно причем тут максимальная оптимизация. Почему проверка деления на 0 не работает с флагом оптимизации, при этом, это нигде не задокументировано, а кроме этого, было изменено при обновлении версии без уведомлений. В C++ с флагом -O0 и -O3 никак на поведение программы никак не влияют.

 

Результат операции деления не используется в дальнейшем, поэтому деление удаляется при оптимизации кода.

Используйте так

void OnTick()
  {
   int zero = 0; // Если компилятор увидит пямое деление на ноль - не даст собрать, по этому через переменную.

   double not_fail = 10 / zero;
   
   Print(not_fail);
  }
 
DrSky #:

Вылетает только в тестере. Можете проверить собрав 

Такая конструкция будет вылетать только в режиме дебагера. В режиме теста, когда собран не под дебаггер - вылетать не будет не смотря на флаг "проверять вещественные делители". 

Получается, что not_fail не используется и поэтому оптимизатор выкидывает эту строку с операцией деления.
 
Ilyas #:

Результат операции деления не используется в дальнейшем, поэтому деление удаляется при оптимизации кода.

Используйте так

А зачем новую переменную под это дело заводить?

Так нельзя:
int zero=0;
zero=10/zero;
?

Я вообще так делал:
Alert(1/(uint)MathAbs(0));