2010-12-08 3 views
4

일부 기능에는 "예약 된 매개 변수"로 인해 NULL로 설정해야하는 매개 변수가 왜 있는지 궁금합니다. 예 :Windows API 예약 된 매개 변수

LONG WINAPI RegQueryValueEx(
    __in   HKEY hKey, 
    __in_opt  LPCTSTR lpValueName, 
    __reserved LPDWORD lpReserved, 
    __out_opt LPDWORD lpType, 
    __out_opt LPBYTE lpData, 
    __inout_opt LPDWORD lpcbData 
); 

왜 lpReserved가 존재하는지 이해할 수 없습니까? 제 말은, 왜 그것을 두었는지를 결정한다면, 직접 생략하는 것이 더 간단하지 않겠는가?

감사합니다. :) (내 영어에 신경 쓰지 마시 .. ..)

답변

11

적어도 두 가지 이유가 있습니다.

이 매개 변수는 향후 사용 및 기능 확장을 위해 예약되어 있습니다. NULL으로 설정하면 미래에 새로운 기능이 추가되면 이전 프로그램을 손상시키지 않을 것이라고 어느 정도 보장 할 수 있습니다.

둘째 가능한 이유는이 매개 변수가 실제로 개인 API의 일부로 내부적으로 사용될 수 있고 API의 공용 부분이이 매개 변수를 NULL으로 설정하도록 지시 할 수 있습니다.

왜 모두 생략하지 않으시겠습니까? 나중에 인터페이스를 변경하지 않고 시스템의 기능을 확장하는 것이 훨씬 쉽습니다. 이전 API와 호환되는 바이너리 및 소스 코드로 유지되며 기존 소프트웨어의 재구성이 필요하지 않습니다.

+0

좋은 지적. 감사. :) – BlackBear

+10

한 가지 다른 이유가 있습니다. API를 만들 때 lpReserved 필드가 다른 용도로 사용되었지만 시간이 지남에 따라 필드가 불필요하거나 필요하지 않게되었습니다. 기존의 모든 클라이언트를 손상시킬 API 서명을 변경하는 대신 API 소유자는 '예약 됨'필드를 선택하기 만했습니다. –

+0

@Larry : 고마워, 네 말이 맞아. 정확하게 말하면, 나는 이것이 ** 모든 이유 **라고 말하지 않았다. 이 질문에 답변을 추가해 주시겠습니까? – detunized

관련 문제