C에서 정적 함수와 변수를 사용하는 이유
는 의 .static
C의 파일에서 변수의 범위 제한으로 키워드를 지정합니다.
제가 보기에 C 프로그램을 만드는 표준 방법은 다음과 같습니다.
- c 있습니다. c 로 가 제한되어 있을 것입니다. 아마도 범위는 다음과 같습니다.
static
. - 다른 c 파일들이 사용할 수 있도록 해당 c 파일의 함수와 변수를 선언하는 h 파일들을 많이 가지고 있습니다.개인 함수 및 변수는 h 파일에 게시되지 않습니다.
- 모든 c 파일은 o 파일로 따로 컴파일됩니다.
- allo 파일은 응용프로그램 파일에 함께 링크됩니다.
을 로 하는 두 봅니다.static
h되지 않은 h 가:
- 하나는 가독성을 위한 것입니다.저를 포함한 미래의 독자들에게 변수가 다른 어떤 파일에서도 접근할 수 없음을 알려줍니다.
- 는 다른 c를 c 입니다.
extern
가 둘 인 것을 입니다. 합니다.extern
그리고.static
를 .로요. ()extern
해도 괜찮습니까 ?
다른 이유는?
그것도 마찬가지입니다.static
기능들. 이 h 되지 않으면 이 어차피 그 수도 왜 프로토타입이 h 파일에 공개되지 않으면 다른 파일들도 어차피 그 기능을 사용하지 못할 수도 있는데 왜 정의를 하십니까로 정의합니까?static
전혀요? 같은 두알 수 더 이상은 같은 두 가지 이유를 알 수 있지만 더 이상은 없습니다.
다른 독자들에게 알리는 것에 대해 이야기할 때, 컴파일러 자체를 독자로 생각하세요.,static
을 미칠 수 .
static
extern
불가능하지만, 컴파일러는 (평소처럼) 스스로 목을 매기에 충분한 밧줄을 줄 것입니다.
글을쓰게되면static int foo;
한 줄로int foo;
이름과 종류가 동일함에도 불구하고 다른 변수로 간주됩니다. 컴파일러는 불평하지 않지만 나중에 코드를 읽거나 디버그하려고 하면 매우 혼란스러울 수 있습니다.(글을 쓰는 경우)extern int foo;
우가 합니다를 한 합니다.int foo;
다른 곳에서.)
않지만,에 나타나는 에는 , 로 .extern
그렇지 해당 하는 모든 할 위험이 링크 정의 의 경우 몇 할 수 있습니다 그렇지 않다면 컴파일러에 따라 해당 헤더를 포함하는 모든 소스 파일이 변수의 고유한 복사본을 선언할 위험이 있습니다. 기껏해야 링크 장애(다중 정의 기호)와 최악의 경우 몇 가지 혼동스러운 경우가 발생할 수 있습니다.
변수를 선언함으로써static
파일 수준(static
함수 내에서는 다른 의미를 갖습니다. 예를 들어, 다른 장치 내에서 변수 사용을 시도하는 경우와 같이 다른 장치에 액세스하는 것을 금지합니다(declared는 다음과 같습니다.)extern
), 링커는 이 기호를 찾을 수 없습니다.
정적 함수를 선언하면 함수에 대한 호출은 "근거리 호출"이며 이론적으로는 "원거리 호출"보다 성능이 뛰어납니다.더 많은 정보는 구글에서 검색할 수 있습니다.이것은 제가 간단한 구글 검색으로 찾은 것입니다.
전역 변수가 정적으로 선언된 경우 컴파일러는 그렇지 않은 경우보다 더 나은 최적화를 수행할 수 있습니다.컴파일러는 다른 소스 파일에서 변수에 액세스할 수 없다는 것을 알고 있으므로 코드가 수행하는 작업(예: "이 함수는 이 변수를 수정하지 않습니다")에 대해 더 나은 추론을 수행할 수 있으므로 때로는 더 빠른 코드를 생성할 수 있습니다.매우 적은 수의 컴파일러/링크러만이 다양한 번역 단위에 걸쳐 이러한 종류의 최적화를 수행할 수 있습니다.
파일 a.c에서 정적으로 만들지 않고 변수 foo를 선언하고 파일 b.c에서 정적으로 만들지 않고 변수 foo를 선언하면 둘 다 자동으로 외부로 전환됩니다. 이는 둘 다 초기화하면 링커가 불평하고 불평하지 않으면 동일한 메모리 위치를 할당할 수 있다는 것을 의미합니다.코드 디버깅의 재미를 기대합니다.
함수 foo ()를 정적으로 만들지 않고 파일 a.c에, 함수 foo ()를 정적으로 만들지 않고 파일 b.c에 함수 foo ()를 쓰면 링커가 불평할 수 있지만 그렇지 않으면 모든 foo () 호출이 동일한 함수를 호출합니다.코드 디버깅의 재미를 기대합니다.
내가 가장 좋아하는 정적 사용법은 사용할 물체를 주입하거나 만들 필요가 없는 방법을 저장할 수 있는 것입니다. 내가 보기에 사설 정적 방법은 항상 유용합니다. 공공 정적이 미친 사람들이 정의한 것을 피하기 위해 무엇을 하는지 생각하는 데 시간을 좀 더 두어야 하는 곳에서.너무 많은 밧줄을 잡고 실수로 목을 매는 것!
저는 대부분의 프로젝트에서 헬퍼 클래스를 위한 폴더를 보관하는 것을 좋아합니다. 이 폴더는 주로 정적인 방법으로 구성되어 있어 신속하고 효율적으로 작업을 수행할 수 있습니다. 객체가 필요하지 않습니다!
언급URL : https://stackoverflow.com/questions/2973849/reasons-to-use-static-functions-and-variables-in-c
'programing' 카테고리의 다른 글
'jquery-2.0.2min.map을 찾을 수 없습니다' 오류 (0) | 2023.10.13 |
---|---|
Oracle - 특정 값을 기준으로 먼저 순서를 지정한 후 나머지 순서를 지정 (0) | 2023.10.13 |
초기화되지 않은 구조 부재는 항상 0으로 설정됩니까? (0) | 2023.10.13 |
Wordpress Twenty Seventeen 앞 페이지 섹션 스크롤 효과가 모바일에서 작동하지 않음 (0) | 2023.10.08 |
HTML 스크립트 태그: 유형 또는 언어(또는 둘 다 생략)? (0) | 2023.10.08 |