홈>
두 개의
*.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
- 답변 # 2
typedef
이동.h
에 헤더 파일. 두 .C Giles에는 헤더 파일이 포함되어 있습니다. C 파일 중 하나에서 변수extern
를 만듭니다. 초기화를 제거하십시오. 전체 프로젝트에서 동일한 변수를 한 번만 초기화 할 수 있습니다Yuo는 정적을 모두 해제 할 수 있으며 컴파일 단위 범위 (예 : 파일)에서 전역 적입니다
관련 자료
- javascript - 객체 반응에서 여러 URL 가져 오기
- typescript - 특정 'this'객체가있는 함수에 대한 유형 정의
- c++ - 단일 클래스에 대해 여러 operator <<() 정의 만들기
- node.js - JSON의 여러 단어 객체 이름, 노드 빨간색
- java - 값과 크기의 합계에 따라 여러 목록에서 개체 목록 분할
- c# - ViewModel의 개체 속성에 바인딩 또는 속성 이름이 같은 여러 모델을 사용하는 방법
- ruby - Rails 6은 다중 객체 생성을 위해 양식에서 hidden_values를보고하지 않습니다
- reactjs - react - 배열에서 여러 개체 변수 업데이트
- typescript - 객체의 여러 배열에서 조합 생성
- C ++의 객체 배열 정의에서 클래스 객체 배열 초기화 값 설정
- jq - 각 일치에 대해 여러 일치가 반환 된 최상위 JSON 개체
- r - 여러 데이터의 변수 목록을 포함하는 목록의 각 개체를 정렬하는 방법
- reactjs - 지도에서 여러 입력 개체 값을 제어하려면 어떻게해야합니까?
- entity framework - TreeList DataSource에 대해 서로 다른 개체 형식의 여러 IQueryable 결합
- go - 여러 json 객체가있는 unmarshal json 파일 (유효한 json 파일이 아님)
관련 질문
- C에서 구조체와 공용체를 사용하여 비트 연산을 수행하는 방법은 무엇입니까?
- c : 구조체 유형인 배열의 요소 선언
- arrays : 구조체 배열을 통해 반복할 때 잘못된 값이 인쇄됨
- arrays : 구조체 내부에 선언된 배열을 초기화하는 방법은 무엇입니까?
- c : 구조체 변수에서 여러 문자 변수를 공백으로 구분된 값과 결합하는 방법은 무엇입니까?
- C: typedef 없이 구조체의 배열을 사용할 때 "배열 유형에 불완전한 요소 유형이 있습니다"
- arrays : C에서 구조체 배열에 대한 메모리를 재할당하는 방법은 무엇입니까?
- C++ 'extern "C" __declspec(dllexport)' 구조체를 Rust로 변환하는 데 문제가 있습니다.
- c : 연결 목록에서 요소 교환
- python : 파이썬에서 배열 멤버로 C 구조체를 읽는 방법
C에는 "로컬 글로벌 변수"와 같은 것은 없다.
myHandler
두 소스 파일 모두에 정의 된 전역 변수입니다. 각 전역 변수는 하나의 정의 만 가질 수 있으므로 유효하지 않습니다.각 소스 파일이 자체 파일 로컬
myHandler
를 갖도록하려면 변수, 당신은 그것을static
선언해야합니다 :이 방법으로 다른 소스 파일의 코드는 이름으로 해당 변수에 액세스 할 수 없습니다.