c 언어 에는 try catch 의 대체 방안 이 없습니다.
접미사 jmp 가 가리 키 는 것 은 바로 jmp 입 니 다.이름 을 닫 으 면 이 두 형제 가 무엇 을 하 는 지 알 수 있 습 니 다.그들 둘 을 사용 하면 프로그램 이 흐름 을 제어 하고 이상 에 대한 처 리 를 실현 할 수 있다.
이상 처리 의 구 조 는 다음 과 같은 세 단계 로 나 눌 수 있다.
#include <stdio.h>
#include <setjmp.h>
static jmp_buf buf;
void second(void) {
printf("second
");
// setjmp - setjmp 1
longjmp(buf, 1);
}
void first(void) {
second();
// , second longjmp
printf("first
");
}
int main() {
int rc;
rc = setjmp(buf);
if (rc==0) {
// ,setjmp 0
first();
}
// longjmp ,setjmp 1,
else if(rc==1){
printf("main
");
}
return 0;
}
/*
the ressult as:
second
main
*/
이제 두 함수 의 성명 을 다시 봅 시다.
물론 당신 도
switch
으로 위의if else
를 대체 할 수 있 습 니 다.사실은 try catch 는 위의 그 함수너 는 이것 을 참고 하여 try catch 를 실현 할 수 있다.에 해당 합 니 다.신호 처리
개인 적 으로 이것 은 Liux 에서 더 잘 사용 되 고 더 많은 신 호 량 매크로 를 제공 했다 고 생각 합 니 다.
다음은 signal 헤더 파일 의 정의 입 니 다.
#define SIGINT 2 // interrupt
#define SIGILL 4 // illegal instruction - invalid function image
#define SIGFPE 8 // floating point exception
#define SIGSEGV 11 // segment violation
#define SIGTERM 15 // Software termination signal from kill
#define SIGBREAK 21 // Ctrl-Break sequence
#define SIGABRT 22 // abnormal termination triggered by abort call
위 키 의 예 만 보 여 줍 니 다.
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
static void catch_function(int signal) {
puts("Interactive attention signal caught.");
}
int main(void) {
if (signal(SIGINT, catch_function) == SIG_ERR) {
fputs("An error occurred while setting a signal handler.
", stderr);
return EXIT_FAILURE;
}
puts("Raising the interactive attention signal.");
if (raise(SIGINT) != 0) {
fputs("Error raising the signal.
", stderr);
return EXIT_FAILURE;
}
puts("Exiting.");
return 0;
}
총결산c 언어 에 try catch 의 대안 이 없 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 c 언어 try catch 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.