2010-06-22 7 views
0

전역 변수를 auto로 선언해도 괜찮습니까? 자동차의 설명을 바탕으로 예를c 선언 및 초기화

auto int i; 
static int j; 

int main() 
{ 
    ... 
    return 0; 
} 
+2

의미가있는 경우 또는 허용 된 경우 운동하려고합니까? –

답변

0

에 대한 는 :

http://msdn.microsoft.com/en-us/library/6k3ybftz%28VS.80%29.aspx

은 자동 변수 범위를 제한하고, 자신의 주소가 일정하지 말한다. 전역 변수에는 이러한 속성이 없으므로 전역 변수가 자동이 될 수는 없습니다.

+2

그건 C++ 레퍼런스입니다. 그 사람들은 가난한 낡은'auto'를 어떻게 사용하는지 알고 있습니다 :-) –

1

C에서 '자동'의 의미는 단순히 지역 변수 인 변수입니다. 그래서 전역 변수를 지역 변수로 선언하고 싶다는 말은 전혀 모순입니다.

나는 당신이 지역화 된 글로벌을 가지고 있다고 이야기하고 있다고 생각합니다. 작업중인 .c 파일에 로컬 인 변수를 선언하고 c 파일 외부에서 액세스 할 수 없도록하고 싶지만 해당 함수의 모든 함수에서 액세스 할 수 있기를 원할 경우 파일을 사용하는 경우 변수 j에 대해 수행 한 것처럼 정적 변수로 선언해야합니다.

static int i; //localised global within the file example.c 
static int j; //not accessible outside the .c file, but accessible by all functions within this file 


int main() 
{ 
     //do something with i or j here. 
     i = 0 ; 
     j = 1 ; 
} 

void checkFunction() 
{ 
     //you can also access j here. 
     j = j+ 5; 
} 

나는 당신이 변수에 대한 정적 키워드를 사용하는 여러 가지 방법이 있다는 것을 추가해야합니다 같아요

따라서 당신은 example.c에 다음과 같은 일을 할 것입니다.

당신이 익숙 할 수있는 일입니다

1) Declaring a variable static within a function - this ensures the variable retains its value between 
    function invocations. 

    The second one ... 
2) Declaring a variable as static within a module (or a .c file) - this is what I have described  
    above. This ensures a variable is localised within that module or .c file, but it is global so that 
    it can be used by any of the functions defined in that particular file. Hence the name localised 
    global. 

그러나 그 .c 파일 외부에서 액세스 할 수 없습니다.

2

질문에 코드 스 니펫을 컴파일하지 않은 이유는 무엇입니까? 가지고 있었다면 컴파일러 오류가 발생한다는 것을 알 수 있습니다. gcc에서 :

foo.c:3: error: file-scope declaration of 'x' specifies 'auto' 

그래서 나는 tyo라는 대답이 "아니오, 괜찮지 않습니다"라고 생각합니다.

0

아니요, 불가능합니다. 그 이유는 전역 변수가 main()이 호출되기 전에 한 번에 0으로 초기화되는 특정 데이터 세그먼트 (함수 내부에 선언 된 정적 변수와 함께)에 있기 때문입니다.