SAL 이란?
SAL은 소스코드 주석언어로
해당 함수가 매개 변수를 사용하는 방법, 해당 매게 변수를 만드는 과정등을 설명하는 주석집합을 의미합니다
헤더파일<sal.h>에 정의 되어있습니다
간단하게 해당 코드에 대한 설명을 하나하나 적지않아도 SAL 주석을 통해 간단하게 이해 할 수있습니다
SAL은 네 가지 기본 유형의 사용 패턴으로 분류되는 매개변수를 정의 합니다
범주 | 매개 변수 주석 | 설명 |
함수 호출에 대한 입력 | _In_ | 해당 데이터는 호출된 함수에 전달되어 읽기 전용으로 취급됩니다 |
호출된 함수에 대한 입력과 호출자에 출력 | _Inout_ | 사용 가능한 데이터 함수에 전달되고 잠재적으로 수정 됩니다 |
호출자에 출력 | _Out_ | 호출자만 쓰려고 하는 호출된 함수에 대한 공간을 제공 합니다 호출된 함수는 해당 공간에 데이터를 씁니다 |
호출자에 포인터 출력 | _Outptr_ | 마찬가지로 호출자에 출력, 호출된 함수에서 반환되는 값이 있습니다. |
이러한 네 가지 기본 주석은 필수 적인 매개 변수로 함수의 성공을 위해 필수 적으로 넣어줘야하는 매개 변수인 반면
필수적이지 않은 매개 변수 들도 존재합니다
예를들어
_In_opt_는 _In_과 같은 호출된 함수에 대한 입력에 해당하는 매개변수지만 해당 매개변수를 입력하지않아도 함수는 성공적으로 작동합니다 이와같이 매개 변수 주석 뒤에 opt_를 붙여준다면 해당 주석은 필수적인지않은 매개변수라는 의미입니다
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
WindowAPI에서 WinMain 함수를 가져와봤습니다
해당 함수에서 hPrevInstance는 _In_opt_로 필수적이지않은 매개변수라는 의미며, 나머지 매개변수는들 _In_ 매개 변수 주석이 있는걸로보아 실행부분을 보지않더라도 필수적으로 입력해줘야하는 데이터의 값으로 인지 할 수 있습니다
이처럼 SAL은 함수에 매개변수들을 보다 쉽게 이해 할 수 있도록하는 주석 집합을 의미합니다