문제

Linux 코드의 장치 드라이버에서 대부분의 기능 정의가 정적으로 정의 된 이유가 있습니까? 이에 대한 이유가 있습니까?

나는 이것이 범죄를위한 것이라고 들었고 네임 스페이스 오염을 방지하기 위해,이 맥락에서 정적 정의가 왜 사용되는지 자세히 설명 할 수 있습니까?

도움이 되었습니까?

해결책

함수 선언 정적은 정의 된 번역 유닛 외부에서 볼 수 없다고 선언했다 (번역 단위는 기본적으로 .c 파일이다). 파일 외부에서 함수를 호출 할 필요가 없으면 글로벌 네임 스페이스를 오염시키지 않도록 정적으로 만들어야합니다. 이것은 동일한 이름 사이의 충돌이 일어날 가능성이 적습니다. 내보내는 기호는 일반적으로 일종의 서브 시스템 태그로 계약을 맺어 충돌 범위를 더욱 줄입니다.

종종 이러한 함수에 대한 포인터는 구조로 끝나기 때문에 실제로는 정의 된 파일 외부에서 기능 이름이 아닙니다.

다른 팁

같은 이유로 모든 코드에서 정적을 사용합니다. 당신은 당신의 API 호출 만 '게시'해야합니다. 다른 모든 것은 운전자 외부에서 내부 기능을 호출 할 수있는 것, 거의 확실하게 치명적일 것입니다.

필요한 것을 외부 세계에만 보이게하는 것은 좋은 프로그래밍 관행입니다. 그것이 캡슐화의 모든 것입니다.

나는 동의한다. 이것은 커널 코드뿐만 아니라 모든 C 코드에서 일반적이고 현명한 관행입니다! 이것이 낮은 수준의 물건에만 적합하다고 생각하지 마십시오. 하나의 .C 파일을 지나서 늘어나는 모든 C 코드는 이것에 대해 생각했을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top