2015-01-30 1 views
0

나는 선언하면C 데이터 세그먼트 식별

static int a ;// globally and 
    static int a ; // locally in one function 

그래서 지금의 두 가지 경우가있다 ..

나는 모든 정적 변수를 데이터 세그먼트로 간다 알고 있지만 그들은 어느 하나의 데이터 세그먼트에서 차별화하는 방법 로컬이고 어느 것이 글로벌인가?

+1

그냥지도 파일을보고 우리에게 .. –

+1

정확히 무슨 뜻인지 모르겠지만 "a"는 변수에주는 이름이고, 컴파일러는 주소 만 알고 있습니다. 'global a'를 참조 할 때는 주소가 있고'local a'는 주소가 있습니다. –

답변

0

당신은 실제로 더 갈 수있다 : 당신이 당신의 프로그램에 기여하는 두 개 이상의 별도의 파일에 파일 범위에서

static int a; 

을 선언 할 수 있습니다. 다른 범위에있는 이러한 선언은 각각 별도의 변수를 선언합니다. 따라서, 주어진

f.c :

static int a; 

int f() { 
    static int a; 
    return 0; 
} 

main.c의 다른 위치에 이름 a과 연관된 세 개의 정적 변수가

static int a; 

int f(void); 

int main() { 
    return f(); 
} 

에스. 올바른 저장소가 각 변수 참조와 연관되도록 정렬하는 것은 컴파일러와 링커의 작업입니다.