#include #include #define T //printf("%s: %s\n", __PRETTY_FUNCTION__, arg) class t { public: t(const char *a) { arg = a; T; } ~t() { T; } private: const char *arg; }; int abra() { t temp("abra"); /// error throw 10; // Возбудить исключение типа int со значением 10 return 0; } void bar() { t temp("bar"); abra(); //t temp2("bar2"); } void foo() { t temp("foo"); try { bar(); } catch (int arg) { printf("Error in foo!\n"); // Зарегистрировали throw; // Пропустить старое исключение дальше } //t temp2("foo2"); } int main() { // Задача: foo может завершиться с ошибкой (иногда). // Как отловить ошибку и её код? int val = 0; clock_t start = clock(); for (int i = 0; i < 1; i++) { try { foo(); } catch (int arg) { // printf("catch %d!!!\n", arg); val += arg; } catch (const char *arg) { printf("catch '%s'\n", arg); } } clock_t end = clock(); printf("val=%d time=%.3lf\n", val, (double)(end - start)/ CLOCKS_PER_SEC); }