1
필자는 생각했던 방식으로 실행되지 않는 샘플 코드가 있습니다.Linux에서 objective-c를 사용하여 예외 catch
#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
결과는 다음과 같습니다
는 GNU 디버거와 함께 재생 조금 나를 보여Aborted
캐치 절에 도달하지 못했다된다. 그것은 맥을 작동하는 것 같다.
왜 catch 절에 들어 가지 않습니까? 필요
Objective-C를 실행하려면 'NSApplication'을 시작해야 할 수도 있습니다. * 아마 * 다른 생각은'@ throw'가 호출 스택을 던지고 있다는 것입니까? '[[NSArray array] objectAtIndex : -1] 또는 무엇인가와 같은 "일반적인"Objective-C 예외를 호출 해보십시오. –
@cry는 @try를 따라야하는 것으로 자연스럽게 보입니다. 따라서 callstack에서 @try 위에 놓을 수는 없습니다. @catch NSArray와 함께'@throw [[NSArray array] objectAtIndex : -1]'을 시도했지만 같은 결과를 얻었습니다. – Steinbitglis
''@Apply '는 ['NSApplication'] (http://www.cocoadev.com/index.pl?ExceptionHandling) 외부에서 작동하지 않는 것처럼 보입니다. [내가 본 코드] (http :// /developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html#//apple_ref/doc/uid/20000059-BBCHGJIJ)는 프로그램의 Objective-C 부분에있는 것으로 보입니다. , 그리고 main.m (거의 순전히 C 임)에있는 것이 아닙니다. –