본문 바로가기
C C++/C언어 기초

C4716 에러: 컴파일러 경고(수준 1)

by Go! Jake 2022. 1. 20.

 

정의

함수를 사용하면 어떠한 값을 반환해야 한다. 따라서, 함수를 사용할 때는 return 값을 설정 해 주어야한다. void는 예외인데, 맨 아래 설명을 참조하면 된다. 아래는 입력한 값만큼 입력한 값을 입력한 값만큼 반복해서 출력하는 코드이다.

#include <stdio.h>
#pragma warning(disable:4996)

int output(int a)
{
	int i;
	for (i = 0; i < a; i++)
	{
		printf("%d\n",a);
	}
}


int main(void)
{
	int a;
	scanf("%d", &a);
	output(a);
	return 0;
}

이 경우 warning C4716: 'output': 값을 반환해야 한다. 와 같이 C4716 에러가 발생한다.

이는, int output(int a)라고 정의된 함수의 return 값이 정의되어 있지 않기 때문이다. 따라서 아래와 같이 return 값을 정의 해 주면 에러가 발생하지 않는다.

 

#include <stdio.h>
#pragma warning(disable:4996)

int output(int a)
{
	int i;
	for (i = 0; i < a; i++)
	{
		printf("%d\n",a);
	}
	return 0;                // return 값 정의
}


int main(void)
{
	int a;
	scanf("%d", &a);
	output(a);
	return 0;
}

return 0을 추가함으로써 더 이상 C4716 에러가 발생하지 않는다. 그렇다면 return이 필요없는 함수라면 어떻게 설정해야 할까?

바로, void output(int a)로 설정하여 return을 설정하지 않고 C4716 에러도 발생시키지 않을 수 있다.

 

#include <stdio.h>
#pragma warning(disable:4996)

void output(int a)
{
	int i;
	for (i = 0; i < a; i++)
	{
		printf("%d\n",a);
	}
}


int main(void)
{
	int a;
	scanf("%d", &a);
	output(a);
	return 0;
}

 

댓글