📄 try-catch-2.mm
字号:
/* Test out '@catch(id foo) {...}', which should catch all uncaught exceptions. *//* Developed by Ziemowit Laski <zlaski@apple.com>. *//* { dg-options "-fobjc-exceptions" } *//* { dg-do run } */#include <objc/Object.h>#include <stdio.h>#include <stdlib.h>/* The following is not required in actual user code; we include it here to check that the compiler generates an internal definition of _setjmp that is consistent with what <setjmp.h> provides. */#include <setjmp.h>#define CHECK_IF(expr) if(!(expr)) abort()@interface Frob: Object@end@implementation Frob: Object@endstatic Frob* _connection = nil;//--------------------------------------------------------------------void test (Object* sendPort){ int cleanupPorts = 1; Frob* receivePort = nil; @try { printf ("receivePort = %p\n", receivePort); printf ("sendPort = %p\n", sendPort); printf ("cleanupPorts = %d\n", cleanupPorts); printf ("---\n"); receivePort = (Frob *) -1; _connection = (Frob *) -1; printf ("receivePort = %p\n", receivePort); printf ("sendPort = %p\n", sendPort); printf ("cleanupPorts = %d\n", cleanupPorts); printf ("---\n"); receivePort = nil; sendPort = nil; cleanupPorts = 0; printf ("receivePort = %p\n", receivePort); printf ("sendPort = %p\n", sendPort); printf ("cleanupPorts = %d\n", cleanupPorts); printf ("---\n"); @throw [Object new]; } @catch(Frob *obj) { printf ("Exception caught by incorrect handler!\n"); CHECK_IF(0); } @catch(id exc) { printf ("Exception caught by correct handler.\n"); printf ("receivePort = %p (expected 0x0)\n", receivePort); printf ("sendPort = %p (expected 0x0)\n", sendPort); printf ("cleanupPorts = %d (expected 0)\n", cleanupPorts); printf ("---"); CHECK_IF(!receivePort); CHECK_IF(!sendPort); CHECK_IF(!cleanupPorts); }}int main (void) { test((Object *)-1); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -