>

두 개의 *.c 가 있습니다  파일. 와이즈 비즈  그리고 fileA.c  두 파일에서 동일한 이름의 구조를 정의하고 있지만 두 파일 모두 전역 변수로 각 파일에 로컬로 있습니다.

예 :

fileA.c

fileB.c

fileB.c

typedef struct
{
int a;
}MyHandler_t;
MyHandler_t myHandler =
{
.a = 0, 
};

문제는 내가 파일 B의 구조에서 변수 a를 초기화하려고하면 typedef struct { int a; }MyHandler_t; MyHandler_t myHandler; 가된다는 것입니다. . 빈 괄호로 남겨 두려고해도 동일한 오류가 발생합니다. 왜 그런 일이 발생합니까?

두 파일 모두 main 함수의 main.c에서 사용되는 함수를 포함하지만 위의 구조는 상태 머신 제어에 사용되는 로컬 전역 변수입니다.

multiple definition of "myHandler"

  • 답변 # 1

    C에는 "로컬 글로벌 변수"와 같은 것은 없다. myHandler  두 소스 파일 모두에 정의 된 전역 변수입니다. 각 전역 변수는 하나의 정의 만 가질 수 있으므로 유효하지 않습니다.

    각 소스 파일이 자체 파일 로컬 myHandler 를 갖도록하려면  변수, 당신은 그것을 static 선언해야합니다 :

    static MyHandler_t myHandler =
    {
    .a = 0, 
    };
    
    

    이 방법으로 다른 소스 파일의 코드는 이름으로 해당 변수에 액세스 할 수 없습니다.

  • 답변 # 2

    typedef 이동    .h 에  헤더 파일. 두 .C Giles에는 헤더 파일이 포함되어 있습니다. C 파일 중 하나에서 변수 extern 를 만듭니다.  초기화를 제거하십시오. 전체 프로젝트에서 동일한 변수를 한 번만 초기화 할 수 있습니다

    Yuo는 정적을 모두 해제 할 수 있으며 컴파일 단위 범위 (예 : 파일)에서 전역 적입니다

  • 이전 Chrome DevTools 기기가 연결되었을 때 기기를 감지하지 못합니다
  • 다음 javascript - ECMAScript 6 클래스 소멸자