2016-12-05 4 views
0

Этот кусок кода аварии на C++, так как он содержит деление на ноль ошибок:Можно ли уловить аппаратные ошибки в C++?

int main() 
{ 
    try { 
     int i = 0; 
     int j = 1/i; 
    } catch(...) {} 
    return 0; 
} 

Можно ли поймать ошибки, как это на различных платформах? Если вы знаете только некоторые из платформ, тогда вы можете ответить о тех, кого знаете.

У меня есть общее представление о SEH на Windows и сигналы в Linux, но я не уверен, есть ли способ поймать всевозможные аппаратные ошибки, как и ошибки программного обеспечения на C++.

Наконец, это выглядит как деление на ноль исключения могут быть пойманы в Python:

try: 
    i = 0 
    j = 1/i 
except: 
    pass 

И в Java:

public class Main { 
    public static void main(String[] args) { 
     try { 
      int i = 0; 
      int j = 1/i; 
     } catch (Exception e) {} 
    } 
} 

Так что мешает им быть пойманными в C++?

+0

Это неопределенное поведение, это не исключение – Danh

+1

Вы бы больше шансов получить это ответил, если бы вы сузили его до единой платформы. Он довольно широк, поскольку он стоит. –

+0

Что мешает им попасть в C++, так это то, что C++ решил «как можно быстрее», даже если это означает, что разные платформы ведут себя по-другому ». Таким образом, платформа, в которой 1/0 оставила все регистры без изменений, будет прекрасной. Java и Python решили пойти «все платформы ведут себя одинаково», поэтому перед делением должна быть проверка нуля. –

ответ

Смежные вопросы