채널톡 아이콘

인프런 커뮤니티 질문&답변

윤정현님의 프로필 이미지

작성한 질문수 4

[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.

처음 보는 에러입니다

해결된 질문

작성

·

36

·

수정됨

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 자주 묻는 질문에 혹시 답이 있을 수 있어요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

oled 실습 중 발생한 처음 보는 에러인데 어떻게 해결 할 수 있을까요

image.png

 

image.png

 

답변 3

0

ojtube5님의 프로필 이미지
ojtube5
지식공유자

문제를 정확히 진단하려면 실제 작성하신 코드를 보는 것이 가장 좋지만,
현재 상황으로 보아 yun_logo1이 중복 정의되어 있는 것이 원인이예요.

보통 이런 중복 정의를 방지하기 위해 #ifndef 를 사용하는데,
문법이 정확히 사용되었는지 확인해보셔야 합니다.

예를 들어 아래와 같은 형태로 작성되어 있어야 합니다:

#ifndef OJW
#define OJW <-- 이게 선언이 되어야. 다음부터 중복 incldue가 안돼요.


#endif

0

윤정현님의 프로필 이미지
윤정현
질문자

메인 소스 파일에 있던 yunlogo 헤더 파일을 제거해서 해결했습니다 하지만 ifndef을 활용해서 헤더가드를 사용했기에 에러가 안 나는 게 맞다고 생각하는데 에러가 생긴 이유가 궁금합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 윤정현님.

임베디드 개발 중 OLED 실습에서 발생한 “multiple definition” 에러에 대해 해결 방법을 안내 드리도록 하겠습니다.

“multiple definition” 오류는 동일한 변수나 함수가 여러 곳에서 정의될 때 발생합니다. 주로 C/C++ 프로젝트에서 발생하며, 주 원인은 헤더 파일의 잘못된 사용에 있습니다.

  1. 헤더 가드 사용하기:

    • 문제의 원인이 된 파일 yun_logo.h에 헤더 가드를 추가하세요. 헤더 가드는 파일이 여러 번 포함되지 않도록 예방해 줍니다.
    • 다음 코드 블록을 yun_logo.h의 시작 부분에 추가하세요:
      ”`c
      #ifndef YUN_LOGO_H
      #define YUN_LOGO_H

    // 기존 코드

    #endif // YUN_LOGO_H
    “`

  2. 변수의 정의와 선언 분리하기:

    • 헤더 파일은 선언을 위해 사용되도록 하는 것이 좋습니다. 헤더 파일에는 extern으로 변수나 함수를 선언하고, 실제 정의는 소스 파일(.c 파일) 내에서 수행하세요. 예:
      • yun_logo.h:
      ”`c
      #ifndef YUN_LOGO_H
      #define YUN_LOGO_H

    extern int yun_logo1; // 선언

    #endif // YUN_LOGO_H

       - `yun_logo.c`:
       ```c
       int yun_logo1 = 0; // 정의
    

이러한 전략들은 이와 유사한 에러를 방지하는데 도움을 줄 것입니다. 유사한 질문과 답변도 참고해 보시면 더 도움이 될 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.