헤더 파일의 변수 선언
이 질문에 이미 답변이 있습니다.
여러 소스에서 사용할 수있는 변수가있는 경우 헤더에 선언하는 것이 좋은 방법입니까? 또는 .c
파일 에서 선언하고 extern
다른 파일에서 사용 하는 것이 더 낫 습니까?
헤더 파일에서 변수를 선언 해야 합니다.
extern int x;
그런 다음 하나의 C 파일 에 정의 하십시오.
int x;
C에서 정의와 선언의 차이점은 정의가 변수를위한 공간을 예약하는 반면 선언은 변수를 기호 테이블에 도입 할뿐입니다 (링크 시간과 관련하여 링커가 검색하도록합니다). .
extern
헤더 파일에서와 같이 선언하고 정확히 1 개의 .c 파일에서 정의 할 수 있습니다.
.c 파일도 헤더를 사용해야하며 표준 패턴은 다음과 같습니다.
// file.h
extern int x; // declaration
// file.c
#include "file.h"
int x = 1; // definition and re-declaration
다음과 같이 선언하면
int x;
여러 위치에 포함 된 헤더 파일에서 여러 x 인스턴스로 끝날 것입니다 (그리고 잠재적으로 컴파일 또는 링크 문제).
이에 접근하는 올바른 방법은 헤더 파일에
extern int x; /* declared in foo.c */
그런 다음 foo.c에서 다음과 같이 말할 수 있습니다.
int x; /* exported in foo.h */
원하는만큼 많은 위치에 헤더 파일을 포함 할 수 있습니다.
핵심은 헤더 파일과 소스 파일의 변수 선언을 동일하게 유지하는 것입니다.
이 트릭을 사용합니다
------sample.c------
#define sample_c
#include sample.h
(rest of sample .c)
------sample.h------
#ifdef sample_c
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN int x;
Sample.c는 한 번만 컴파일되며 변수를 정의합니다. sample.h를 포함하는 모든 파일에는 변수의 "extern"만 제공됩니다. 해당 변수에 공간을 할당합니다.
x의 유형을 변경하면 모두에게 변경됩니다. 소스 파일과 헤더 파일에서 변경하는 것을 기억할 필요가 없습니다.
이 솔루션은 어떻습니까?
#ifndef VERSION_H
#define VERSION_H
static const char SVER[] = "14.2.1";
static const char AVER[] = "1.1.0.0";
#else
extern static const char SVER[];
extern static const char AVER[];
#endif /*VERSION_H */
내가 보는 유일한 단점은 동일한 파일에 두 번 포함하면 include 가드가 당신을 저장하지 않는다는 것입니다.
참고 URL : https://stackoverflow.com/questions/1164167/variable-declaration-in-a-header-file
'Program Tip' 카테고리의 다른 글
PHP에서 try-catch의 성능 (0) | 2020.12.10 |
---|---|
사용자 정의 유형으로 std :: set, 중복이 없는지 확인하는 방법 (0) | 2020.12.10 |
파이썬 함수에서 데코레이터를 제거하는 방법 (0) | 2020.12.10 |
int 변수를 double로 변환해야합니다. (0) | 2020.12.10 |
Android SQLite 삽입 또는 업데이트 (0) | 2020.12.10 |