IT이야기

서로 다른 .c 파일 간에 변수를 공유하려면 어떻게 해야 하는가?

cyworld 2022. 4. 17. 18:43
반응형

서로 다른 .c 파일 간에 변수를 공유하려면 어떻게 해야 하는가?

C 선언에 대한 초보적인 질문:

.c 파일에서 다른 .c 파일에 정의된 변수를 사용하는 방법

파일A.c:

int myGlobal = 0;

파일A.h.

extern int myGlobal;

파일B.c:

#include "fileA.h"
myGlobal = 1;

이렇게 하는 겁니다.

  • 변수는 A.C.에 산다.
  • fileA.h는 그것이 존재하며, 그것의 종류는 무엇인지를 세계에 알려준다.int)
  • fileB.c는 컴파일러가 myGlobal을 사용하기 전에 미리 알 수 있도록 fileA.h를 포함한다.

모든 사례의 99.9%에서 파일 간에 일정하지 않은 전역 변수를 공유하는 것은 나쁜 프로그램 설계다.당신이 실제로 이것을 해야 하는 경우는 거의 없다: 그것들은 매우 드물기 때문에 나는 어떤 유효한 사례도 생각해 낼 수 없다.하드웨어 레지스터의 선언일 수 있음.

대부분의 경우, 대신 세터/게터 함수("공개"), 파일 범위의 정적 변수("개인") 또는 불완전한 유형 구현("개인")을 사용해야 한다.

파일 간에 변수를 공유해야 하는 드문 경우 다음과 같이 하십시오.

// file.h
extern int my_var;

// file.c
#include "file.h"
int my_var = something;

// main.c
#include "file.h"
use(my_var);

어떤 형태의 변수 정의도 h 파일에 넣지 마십시오.

변수가 다음과 같은 경우:

int foo;

두 번째 C 파일에서 다음과 같이 선언하십시오.

extern int foo;
  1. 지구본은 피하도록 해.글로벌을 사용해야 하는 경우 다른 답변을 참조하십시오.
  2. 그것을 하나의 함수에 논거로 전가한다.

이러한 다른 변수는 공개(외부 사용, 공개는 C++용)로 선언되어야 하며, 해당 .c 파일을 포함해야 한다.그러나 모든 변수를 정의하기 위해 적절한 .h 파일을 만들 것을 권장한다.

예를 들어 hello.c의 경우 hello.h를 사용하고 hello.h를 사용하면 변수 정의를 저장할 수 있다.그러면 world.c와 같은 또 다른 .c 파일이 상단에 다음과 같은 코드를 가지고 있을 것이다.

#include "hello.h"

그러면 world.c가 hello.h에 정의된 변수를 사용할 수 있게 된다.

하지만 그것은 그것보다 약간 더 복잡하다.OS의 경로에 있는 라이브러리 파일을 포함하기 위해 <>를 사용할 수 있다.초보자로서 나는 당신의 모든 파일을 같은 폴더에 넣고 " " 구문을 사용할 것이다.

두 번째 파일은 변수의 존재에 대해 알아야 한다.이렇게 하려면 변수를 다시 선언하지만 키워드를 사용하십시오.extern그 앞에이는 컴파일러에게 변수를 사용할 수 있지만 다른 곳에 선언하므로 변수를 삽입하는 것을 방지한다(연결할 때 충돌을 야기할 수 있음).당신이 그것을 넣을 수 있는 동안extern수반되는 헤더를 갖는 것이 일반적인 스타일이다(즉, C 파일 자체의 선언)..h각 파일.c다음을 포함하는 다른 사람에게 기능 또는 변수를 제공하는 파일extern신고서이렇게 하면 복사하는 것을 피할 수 있다.extern선언(특히 여러 개의 다른 파일에서 사용되는 경우)키워드는 필요 없지만 기능도 마찬가지다.extern그들을 위해

그렇게 세 그 때 렇렇한하면 ac일한()의 파日(일日)을 변수를 선언하는 소스 파일, 이 파일을 수행하는 것은 헤더를 사용하는 것이다.extern다음과 같은 두 번째 소스 파일 및#includes 내보낸 변수(또는 헤더로 내보낸 다른 기호)에 접근하기 위한 헤더.물론, 링커는 링크된 파일에 실제로 존재하는 경우에만 가능한 기호를 해결해야 하기 때문에, 그와 같은 것을 연결하려고 할 때는 모든 소스 파일(또는 적절한 오브젝트 파일)이 필요하다.

참조URL: https://stackoverflow.com/questions/1045501/how-do-i-share-variables-between-different-c-files

반응형