В системе Gnu я могу написать макрос C, например dies_ok(), который будет вилять новый процесс, запускать кусок кода, после чего он может писать в общий кусок памяти, который он не выходил, а затем в родительском процессе я могу определить, вышел ли он или нет. Это полезно для испытаний:Определите, если часть кода выходит из программы с помощью MSVC
dies_ok({int x = 0/0;}, "can't divide by zero");
lives_ok({int x = 3/7;}, "this is a perfectly fine statement");
dies_ok({abort();}, "abort kills the program");
Есть ли способ сделать это на MSVC, где нет функции вилки?
EDIT: Heres реализация, которая работает на Linux с GCC: http://github.com/zorgnax/libtap/blob/master/tap.h
Звучит как проблема с остановкой (http://en.wikipedia.org/wiki/Halting_problem). – kennytm
Не совсем так, потому что я не ищу, есть ли бесконечный цикл. Я предполагаю, что тестируемый код либо закончится, либо не закончится, либо не выйдет. В Perl это эквивалентно использованию eval {exit}, а затем, если будет определено $ @. Если бы это не остановилось, у меня было бы слишком много проблем. – Jake