2016-07-05 1 views

답변

2

로 실패 오류를 선언과 같은 글로벌 변수 도시 컴파일러에게 이것이 GlobalInt로 식별되는 int 유형의 개체가 존재한다는 선언임을 알립니다. 나중에 정의 될 수도 있고 그렇지 않을 수도 있습니다 (링커의 작업임을 보장하는 것은 컴파일러의 책임이 아닙니다). 이 점에있어서 함수 프로토 타입과 유사합니다. 헤더가 존재 말한다 때문에 지금

int GlobalInt = 4; 

, GlobalInt에 액세스 할 수 있습니다 헤더를 포함 각 파일, 그래서 컴파일러는 행복하다 :

은 소스 파일 중 하나에서, 당신은 GlobalInt 정수를 정의 링커가 소스 파일 중 하나에서이 파일을 볼 수 있으므로 너무 행복 할 것입니다. 그냥 두 번 정의하지 마라.

1

헤더 파일의 경우 변수를 extern으로 선언하십시오. 하나의 실행 파일 (.c 또는 .m)에서

extern NSInteger myGlobalInteger; 

는 정상 선언.
NSInteger myGlobalInteger; 

머리글에 extern을두면

, 당신은 같은 이름과 범위를 새로운 변수가/헤더를 수입을 포함 모든 파일에 작성하도록합니다. 중복 된 기호로 끝나기 때문에 링커에 문제가 발생합니다.

변수를 헤더에 extern으로 선언하면 컴파일러에 어딘가에 주어진 유형의 변수가 있다는 것을 알립니다. 실제로 정의 된 부분에 대해서는 걱정하지 않습니다. 링크시 링커는 실제 선언에 대한 모든 참조를보고 참조를 수정합니다.

0

.m 파일에도 해당 변수를 정의하십시오. 예를 들어 아래 찾아주세요 :

extern NSInteger MYGlobalVariable; 

그런 다음에 넣고 : 응용 프로그램을 종료하고 다시 시작할 때 표준 글로벌 변수의

을 지속적이지, 당신의 선택의 헤더 파일 (*.h)이 추가 구현 파일 (*.m, *.c, *.cpp가) : 당신이 빵과 버터 전역 변수를 어떻게

MYGlobalVariable = 0; // Or ny other default value. 

때문입니다.