Development Tip

다른 .c 파일간에 변수를 어떻게 공유합니까?

yourdevel 2020. 11. 26. 19:57
반응형

다른 .c 파일간에 변수를 어떻게 공유합니까?


C 선언에 대한 초급 질문 :

.c 파일에서 다른 .c 파일에 정의 된 변수를 사용하는 방법은 무엇입니까?


fileA.c에서 :

int myGlobal = 0;

fileA.h에서

extern int myGlobal;

fileB.c에서 :

#include "fileA.h"
myGlobal = 1;

그래서 이것이 작동하는 방법입니다.

  • 변수는 fileA.c에 있습니다.
  • fileA.h는 그것이 존재하고 그 유형이 무엇인지 세상에 알려줍니다 ( int)
  • fileB.c에는 fileA.h가 포함되어 있으므로 fileB.c가 myGlobal을 사용하기 전에 컴파일러가 myGlobal에 대해 알 수 있습니다.

변수가 다음과 같은 경우 :

int foo;

두 번째 C 파일에서 다음을 선언합니다.

extern int foo;

  1. 전역을 피하십시오. 글로벌을 사용해야하는 경우 다른 답변을 참조하십시오.
  2. 함수에 인수로 전달하십시오.

모든 경우의 99.9 %에서 파일간에 상수가 아닌 전역 변수를 공유하는 것은 잘못된 프로그램 설계입니다. 실제로이 작업을 수행해야하는 경우는 거의 없습니다. 매우 드물 어서 유효한 사례를 찾을 수 없습니다. 아마도 하드웨어 레지스터 선언.

대부분의 경우 (인라인 된) setter / getter 함수 ( "public"), 파일 범위의 정적 변수 ( "private") 또는 불완전한 유형 구현 ( "private")을 대신 사용해야합니다.

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

// file.h
extern int my_var;

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

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

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


다른 변수는 public (extern 사용, public은 C ++ 용)으로 선언되어야하며 해당 .c 파일을 포함해야합니다. 그러나 모든 변수를 정의하기 위해 적절한 .h 파일을 만드는 것이 좋습니다.

예를 들어 hello.c의 경우 hello.h가 있고 hello.h는 변수 정의를 저장합니다. 그런 다음 world.c와 같은 다른 .c 파일의 맨 위에 다음 코드가 있습니다.

#include "hello.h"

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

그래도 그것보다 약간 더 복잡합니다. <>를 사용하여 OS 경로에있는 라이브러리 파일을 포함 할 수 있습니다. 초보자로서 모든 파일을 동일한 폴더에 저장하고 ""구문을 사용합니다.


두 번째 파일은 변수의 존재에 대해 알아야합니다. 이렇게하려면 변수를 다시 선언하고 그 extern앞에 키워드 사용 합니다. 이것은 컴파일러에게 변수가 사용 가능하지만 다른 곳에서 선언되어 있음을 알려주므로 인스턴스화하는 것을 방지합니다 (링크 할 때 충돌을 일으킬 수 있음). C 파일 자체에 선언을 넣을 있지만 extern선언 을 보유하는 다른 사용자에게 함수 또는 변수를 제공 .h하는 각 .c파일에 대한 헤더 (예 :) 파일을 동반하는 것이 일반적인 스타일 extern입니다. 이렇게하면 extern특히 여러 다른 파일에서 사용되는 경우 선언 복사를 방지 할 수 있습니다. 함수에도 동일하게 적용되지만 키워드 extern필요하지 않습니다 .

이렇게하면 변수를 선언하는 소스 파일, 선언을 수행하는 수반 헤더 extern#include내 보낸 변수 (또는 헤더에서 내 보낸 다른 기호에 대한 액세스 권한을 얻기위한 헤더) 인 두 번째 소스 파일이 있습니다. ). 물론 링커는 링크 된 파일에 실제로 존재하는 경우에만 가능한 심볼을 확인해야하기 때문에 이와 같은 것을 연결하려고 할 때 모든 소스 파일 (또는 적절한 개체 파일)이 필요합니다.

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

반응형