G Y U L O G

title

C6031
"경고 C6031: 반환 값이 무시 되었습니다. <function >에서 예기치 않은 값을 반환할 수 있습니다."

fopen이나 scanf의 경우 반환값이 존재하는 함수들이죠. 입력에 의한 반환 값을 넘기는 함수들입니다.

 

C보다 상위레벨의 언어인 파이썬, 스위프트를 예시로 예외처리라는 게 있습니다. 만약 반환 값이 null일 경우 생기는 오류를 막기위해 해주는 작업입니다. 방어적 프로그래밍이라고도 불리죠. 

 

C에서는 예외처리라는 게 따로 존재하지 않기 때문에 null일 경우를 조건문으로 필터링해줘야합니다.

 

1.fopen의 경우

fopen( "test.txt", "r" );

2.scanf의 경우

scanf("%s", buffer)

이 두가지의 경우가 제일 많이 겪게되는 상황일겁니다. 처리 방법은 동일해요.

 

저 함수를 사용할 때 반환값이 있다는 사실을 알게 된 순간 조건문의 인수로 사용가능합니다.

FILE *fp;
  if((fp = fopen( "test.txt", "r" )) == NULL )
    return;
  else //원래 하려던 행동

파일의 경우 저장할 수 있으니 저장과 동시에 null체크하는 게 가능합니다. 

 

권장되는 함수인 safe함수 fopen_s를 사용하는 법은 더 이 취지에 잘 맞습니다.

 

error변수를 추가해주는 방법이죠.

FILE *fp;
  errno_t err;

  if( (err  = fopen_s( &fp, "test.txt", "r" )) !=0 )
  {
    //하려던 코드
  }

scanf의 경우에는 더 간단해요.

if (scanf("%s", buffer) == NULL) {
			return 0;
		}

scanf를 사용하는 경우에는 이미 입력과 동시에 해당 배열에 저장을 할 것이기 때문에 파일의 경우처럼 안해줘도 됩니다. 그냥 NULL값이 감지되는 경우 0값을 반환해 실행을 끝내버리는 것이죠.

 

C++의 경우에는 NULL값이 진정한 의미로의 NULL입니다. nullptr이죠.

 

그러나 C의 경우에는 NULL값이 0과 동일한 값으로 취급 때문에 NULL대신 0으로 해주어도 됩니다.

 

문자열의 끝을 알려주는 널값과는 다른 관계임을 숙지하고 계셔야합니다.

댓글과 공감은 정말 큰 힘이 됩니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band