2011-01-02 4 views
32

가능한 중복 :
What does “static” mean in a C program?무엇합니까 ANSI-C의 정적 평균

static 키워드는 C에서 무엇을 의미합니까?

저는 ANSI-C를 사용하고 있습니다. 여러 코드 예제에서 변수와 함수 앞에 static 키워드를 사용했습니다. 변수를 사용하는 경우 목적은 무엇입니까? 그리고 함수를 사용하는 경우 목적은 무엇입니까?

+0

나는했으나 정확한 목적을 이해하기 어렵다. 나는 변수를 사용하는 것에 대해 거의 이해할 수 없었다. 하지만 함수와 함께 사용합니까? – Sency

+1

찾았습니까? http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program –

+1

... 또는 this : http://stackoverflow.com/questions/943280/ static-in-c-and-static-in-c –

답변

57

그냥 간단한 대답과 같이 static 키워드에 대한 두 가지 용도가있다 파일. 다른 파일에서 액세스하려고하면 링크시 미해결 기호가 표시됩니다.

2 함수 내의 블록 내에 static으로 정의 된 변수는 동일한 코드 블록의 다른 호출에서 지속되거나 "생존"합니다. 초기화가 정의 된 경우에는 한 번만 초기화됩니다. static 변수는 일반적으로 0으로 초기화되도록 보장됩니다.

+8

1 : 정적에 대해서도 함수에 적용 할 수 있으며 함수를 외부에 숨길 수도 있습니다. – datenwolf

+6

이 질문의 다른 구체화에서 말했지만 Google에서 온 사람들에게 엄격히 말하면 1은 파일이 아닌 컴파일 단위에 적용됩니다. – Jared

+0

@Roux hass : "초기화가 정의 된 경우"그게 무슨 뜻입니까? 그것들이 정의 될 때 0이 아닌 값으로 초기화된다면? – moonman239

30

static 변수 기억 장치 분류 자로 사용되는 변수는 함수 호출 사이의 값을 유지하도록 변수를 만듭니다. 함수 내의 정적 변수는 그 함수에서만 볼 수있는 전역 변수입니다 . static을 사용하면 항상 스레드에서 사용되는 함수가됩니다. 안전하지 않습니다. 당신은 그것을 피해야합니다.

다른 사용 사례는 글로벌 범위, 즉 전역 변수와 함수에 대해 static을 사용합니다. 정적 함수와 전역 변수는 컴파일 단위에 로컬입니다. 즉, 컴파일 된 이진 파일의 내보내기 테이블에 나타나지 않습니다. 목적. 따라서 그들은 네임 스페이스를 오염시키지 않습니다. 문제의 컴파일 유닛 (즉, C 파일) 외부에서 액세스 할 수 없도록 모든 함수와 전역 변수를 정적으로 선언하는 것이 좋습니다. 정적 변수를 헤더 파일에 두어서는 안된다는 점을 명심하십시오 (매우 드문 특수한 경우 제외). static 키워드로 파일 범위에 정의

1 변수 정의 외부 함수는 그 안에 볼 수 있습니다 : 변수를 정의 할 때