2010-12-27 8 views
1

나는이 같은 C 헤더 파일이 ES1Renderer.m Sprite 인스턴스를 만듭니다. ES1Renderer의 렌더링 메톤에서 나는이 인스턴스의 draw 메소드를 호출하고 g_count 변수는 draw 메소드에서 정상적으로 계산됩니다 (draw에서 6 개의 g_addVertex (...) 함수 호출 후 값 6)아이폰의 목표 - C 전역 변수에 다른 값

Sprite 인스턴스 그리기 메서드가 호출 된 직후 ES1Renderer의 render 메서드에서 g_flush() 함수를 호출합니다. g_flush()에서 g_count 변수의 값은 0입니다. 6 개의 g_addVertex Sprite 클래스의 메서드를 그립니다.

왜 내가 g_count가 0으로 변경되는지 모르겠다. 그 값을 변경하는 다른 기능이나 그 사이에는 아무 것도 없다.

+0

당신은 g_flush 메소드에서 g_count를 0으로 설정한다는 것을 알고 있습니다. –

+0

g_flush의 첫 번째 줄은 NSLog (@ "count : % d", g_count)입니다. 그리고 디버그에서 커서를 g_count로 이동하면 6이 표시되지만 g_flush()에 들어가면 0을 표시합니다. (g_count = 0; 실행) – Dav1d

+0

커서를 이동하면 NSLog의 g_count 변수 (@ "count : % d", g_count); 그것은 0을 보여줍니다.하지만 커서를 g_count 행으로 이동하면 정적 int g_count = 0; Renderer.h에서 6을 보여줍니다 ... 동일한 전역 변수 인 경우 왜 동일하지 않습니까? – Dav1d

답변

6

고정 변수는 이 아니고 글로벌입니다. 정적 변수는 이고 파일 범위는이고 내부 연결이므로 머리글을 포함하는 각 파일은 자체 g_count이됩니다. 전역 변수를 원하면 int g_count을 하나의 구현 파일에 쓰고 extern int g_count을 헤더에 넣으면 해당 전역 변수를 사용하는 다른 파일이 가져옵니다.

+0

대단히 감사합니다! – Dav1d

관련 문제