У меня есть пример кода, который работает не так, как я думаю.
#import <Foundation/NSString.h>
#import <Foundation/NSException.h>
#import <Foundation/NSAutoreleasePool.h>
#import <stdio.h>
int main( int argc, const char *argv[] ) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
@try {
NSException *e = [NSException
exceptionWithName: @"NSException"
reason: @"The level is below 0"
userInfo: nil];
@throw e;
} @catch ( NSException *e ) {
printf( "+%s: ", [[e name] UTF8String] );
}
[pool release];
}
Я запускаю его следующим образом:
> gcc -g -c main.m -fconstant-string-class=NSConstantString -I/usr/include/GNUstep
> gcc main.o -lgnustep-base
> ./a.out
Результат:
Aborted
Небольшая игра с отладчиком GNU показала мне, что условие catch никогда не достигается.Кажется, что работает Mac.
Почему я не попадаю в предложение catch?