F.R.I.D.A.Y.

VS ERROR C4013 : function(가) 정의되지 않았습니다. extern은 int형을 반환하는 것으로 간주합니다. 본문

DEV/Tip

VS ERROR C4013 : function(가) 정의되지 않았습니다. extern은 int형을 반환하는 것으로 간주합니다.

F.R.I.D.A.Y. 2019. 3. 22. 18:21
반응형


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

int main(void) {
	char *str1 = "hello";
	char str2[20] = { 0, };

	strcpy(str2, str1);

	printf("%s\n%s\n", str1, str2);

	return 0;
}

 위 코드는 문제 없이 돌아가기도, 돌아가지 않기도 합니다. 왜일까요?



1. 발생하는 경고

 위 코드대로 작성하면 VS 기준으로 아래와 같은 경고가 발생합니다. 경고 수준에 따라서 오류로 표시될 수도 있습니다.


 이 문제는 strcpy라는 함수가 선언되지 않았기 때문에 발생하는 문제입니다. 그런데, 왜 선언되지 않은 함수를 사용했는데 문제 없이 컴파일되고 작동하는 것일까요? 이유는 기본 라이브러리에 존재하는 함수이기 때문입니다. VS는 strcpy와 같이 C언어와 함께 태동한(?) 함수들이 사용되면 헤더를 자동을 포함해줍니다. 그래서 문제가 발생하지 않았던거예요. 단순히 경고로만 알려주었던것이죠. 



2. 문제 해결

 이 문제는 해당 함수가 포함된 헤더를 추가함으로써 해결할 수 있습니다. 예제 코드에서는 strcpy를 사용했기 때문에 헤더를 추가한 것이지만, 만일 선언이 되어있지 않은 사용자 지정 함수를 사용한 경우에는 함수 호출보다 우선하여 작성하면 문제를 해결할 수 있습니다.


#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h> // strcpy 사용을 위한 string.h 헤더 추가

int main(void) {
	char *str1 = "hello";
	char str2[20] = { 0, };

	strcpy(str2, str1);

	printf("%s\n%s\n", str1, str2);

	return 0;
}

  잠재적으로 문제를 일으킬 수 있는 코드는 모여서 큰 오류를 일으킬 수 있으니 하나하나 해결해보세요. 사라지는 오류/경고 항목을 보면서 희열을 느끼실 때가 올겁니다 :)

728x90
반응형
Comments