2011-08-08 3 views
2

NULL 포인터를 확인하는 다음 함수 구현이 있습니다. 이것은 리눅스 드라이버, C 코드의 일부입니다 :이 경우 "휘발성"의 이점은 무엇입니까?

bool is_null_ponter(volatile void* ptr) 
{ 
    return (NULL == ptr)? true : false; 
} 

그런 경우 휘발성의 장점은 무엇입니까? 왜 그것을 기록부에 넣지 않습니까?

감사합니다.

+0

http://stackoverflow.com/questions/3604569/what-kinds-of-optimizations-does-volatile-prevent-in-c/3604599#3604599를 참조하십시오. 유사한 (그러나 중복되지 않는 IMHO) question – jonsca

답변

9

volatilevolatile 수식어도 오류 또는 경고없이 모든 포인터를 함수에 전달할 수 있습니다.

그러나 이것은 가짜입니다. 드라이버는 매우 전문적으로 작성된 것 같지 않습니다.

먼저 포인터를 완성하려면 const이어야하며 그 다음에는 실제로 모든 포인터를 캡처해야합니다.

그런 다음이 함수에 대한 사용 사례는 전혀 없습니다. _Bool 컨텍스트 (여기 !ptr)에서 포인터는 자연스럽게 정답으로 연결되며 이는 표준에 의해 지정됩니다. 여기를 보았을 때 다르게하는 것은 아마 커널 커뮤니티에서 많은 눈살을 찌푸리게 될 것입니다. 그리고이 드라이버가 제대로 검토되지 않았다고 생각합니다.

+1

나는 동의한다 : 내가 이것을 보았을 때 내 생각을 뒤흔든 첫 번째 생각은 "누가이 작은 보석을 누가 Linux repo에 넣었는지 확인하기 위해 개정 내역을보고 싶다"였다. – Crashworks

+0

필자는이 코드가 휘발성 변수에 대한 포인터가 될 것이라는 느낌이 들었습니다. (그래서 포인터는 모든 읽기에 대해 deref'd가되어야합니다.) 휘발성 포인터가 아니라 '전문적으로 작성하지 말아야합니다' – Necrolis

관련 문제