Latest web development tutorials

C 오류 처리

C 언어는 오류 처리에 대한 직접 지원을 제공하지 않지만, 시스템 프로그래밍 언어로,이 형태의 값은 기본 데이터에 액세스 할 수 있습니다 반환합니다. 오류가 발생하면, UNIX 또는 C 함수 호출의 대부분이 오류 코드는 글로벌변수이며, 1 또는 NULL이 에러 코드는 또한 errno를설정한다 반환는 발생 함수 호출 에러 과정 나타냈다. 당신은 오류 코드 <error.h> 헤더 파일의 다양한 찾을 수 있습니다.

따라서, C 프로그래머는 적절한 조치 및 반환 값에 따라 결정을 내릴 것을 확인하여 값을 반환 할 수 있습니다. 개발자는 프로그램 초기화시의 errno는 좋은 프로그래밍 습관 인 0으로 설정해야합니다. 0의 값은 프로그램이 오류를 나타냅니다.

errno를, perror는 ()와와 strerror ()

C 언어perror는 ()과의errno와 관련된 텍스트 메시지를표시와 strerror ()함수를제공한다.

  • perror는 () 함수는 패스를 콜론, 공백과 현재의 errno 값의 텍스트 표현 다음의 문자열을 표시합니다.
  • 와 strerror () 함수는 errno를 텍스트 표현의 현재 값에 대한 포인터를 반환합니다.

의 거짓 경우, 존재하지 않는 파일을 열 수있는 시도를 시뮬레이션 할 수 있습니다. 당신은 출력에 오류 메시지를 여러 가지 방법을 사용할 수 있습니다, 우리가 사용을 보여주기 위해 함수를 사용합니다. 또 다른 것은 모든 오류에표준 에러 출력 파일 스트림을 사용한다주의한다.

#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno ;

int main ()
{
   FILE * pf;
   int errnum;
   pf = fopen ("unexist.txt", "rb");
   if (pf == NULL)
   {
      errnum = errno;
      fprintf(stderr, "错误号: %d\n", errno);
      perror("通过 perror 输出错误");
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

错误号: 2
通过 perror 输出错误: No such file or directory
打开文件错误: No such file or directory

제로 오류에 의해 부

분할 동안, 제수가 확인되지 않은 경우, 런타임 오류가 발생합니다 제로이다.

이를 방지하려면 먼저 제수를 확인합니다 분할하기 전에 다음 코드는 0입니다 :

#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 0;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为 : %d\n", quotient );

   exit(0);
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

除数为 0 退出运行...

프로그램 종료 상태

정상적인 상황에서, 정상 동작 시간 후 프로그램의 성공적인 구현은 가치 EXIT_SUCCESS가 종료된다. 여기에, EXIT_SUCCESS 매크로, 0으로 정의된다.

프로그램에서 실수가있는 경우 프로그램을 종료 할 때, 상태 값 EXIT_FAILURE을 수행한다, 그것은 -1로 정의된다. 따라서, 위의 과정과 같이 쓸 수있다 :

#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为: %d\n", quotient );

   exit(EXIT_SUCCESS);
}

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

quotient 变量的值为 : 4