a.cpp에 있는 전역변수 Alpha *a를
b.cpp의 beta()에서 a를 쓰고 싶으면
아래쪽 처럼 무조건 extern 써주고 사용해야함??
아래쪽 처럼 쓰는 방식을 무슨 방식이라고 함?
void beta()
{
extern Alpha* a;
beta_func( a );
}
a.cpp에 있는 전역변수 Alpha *a를
b.cpp의 beta()에서 a를 쓰고 싶으면
아래쪽 처럼 무조건 extern 써주고 사용해야함??
아래쪽 처럼 쓰는 방식을 무슨 방식이라고 함?
void beta()
{
extern Alpha* a;
beta_func( a );
}
extern 은 함수 안에 적을 필요 없고 함수 밖 아무 데나 적어도 됨
지금 말씀해주시는 개념이 잘 안 잡히는데 어디를 다시 공부해야 할까요?
음 글쎄? 선언(declaration)에 대해 복습하면 되려나. 다른 파일에 있는 변수뿐만 아니라 같은 파일 내의 변수도 extern이 붙지 않을 뿐 선언 문법은 동일하고 선언해야 하는 위치도 똑같거든. 변수가 아니라 함수여도 마찬가지
그건 그냥 a.cpp의 a가 static이 아니라서 그런건데??
제가 무지해서 그런데 a가 스태틱이면 a.cpp 내부에서만 쓸 수 있는 것 아닌가요?
무슨 방식이라고 한다라... 그냥 선언이지. C에서 전역 변수는 기본적으로 모든 파일(컴파일 단위)에서 공유된다. 따라서 그냥 그런 변수가 어딘가에 있다고 컴파일러한테 알려만 주면 쓸 수 있는 거지. 그게 선언이고
다른 파일간에 사용되는 전역변수는 보통 헤더에 넣는데.
b.h에 미리 extern Alpha* a를 하고 b.cpp에서 a를 쓴다는 말씀이신가요?
extern 은 그 코드~그 코드가 읽는 헤더 안에서 정의 없지만 써야될 때 쓰는 거 아니었던가... 가물가물...
pe 구조까지는 애바구, 외부 링크 , 내부 링크 정도 찾아보면 나오겠네염
간단히 말해주면, 각각의 cpp파일이 컴파일 후에 obj파일이 생성되는데, 해당 obj에서 메모리에 대한 이름(=라벨)은 링크 과정에서 부여되, 이때 이름의 속성에 따라 중복되어도 되거나 또는 그렇치 않아야 되는것들이 나뉘는데.. 그것에 대해서 공부하고 싶다면 "외부링크,내부링크" 를 공부하면되