python & 라즈베리파이

Multiple Definition of first defined here

진아사랑해 2023. 7. 27. 19:56
반응형

C언어로 프로그램을 작성하다 보면 중복으로 정의가 되어 있다는 에러를 가끔 마주하게 됩니다.

이러한 에러가 왜 나오는지에 대해 간략하게 알아보겠습니다.

에러가 발생하는 구문 예제

a.h라는 파일

#ifndef _A.H_

#define _A.H_

int a;

#endif

 

main.c

#include "a.h"

main(){

 

}

 

a.c

#include "a.h"

void a(){

 

}

이렇게 프로그램을 작성하면 Multiple Definition 에러가 발생합니다.

에러가 발생하는 이유 및 해결책

gcc에서는 별도의 파일에 동일한 변수가 선언되는 것을 허용하지 않습니다.

#ifndef _A.H_ 를 사용하여도 동일한 에러가 발생합니다.

gcc 10.0부터 이러한 기능이 강화되었습니다.

main.c 또는 a.c에 int a를 선언하고

a.h 파일에 extern int a;로 정의하여 필요한 파일에 include "a.h"를 하는 것이 좋습니다.

a.h

extern int a;

 

main.c

int a;

main(){

 

}

 

a.c

#include "a.h"

a(){

 

}

이렇게 하는 것이 에러를 없애는 방법입니다.

 

반응형