c언어에서 #ifndef IN #define IN 은 왜 사용하는 건가요?
조회수 1001회
<헤더파일>
#ifndef OUT
#define OUT
#endif
#ifndef IN
#define IN
#endif
<소스 중>
//*********************************************************************************************************************************
// o SHA256_Process() : 임의의 길이를 가지는 입력 메시지를 512 비트 블록 단위로 나누어 압축함수를 호출하는 함수
// o 입력 : Info - SHA-256 구조체의 포인터 변수
// pszMessage - 입력 메시지의 포인터 변수
// uDataLen - 입력 메시지의 바이트 길이
// o 출력 :
//*********************************************************************************************************************************
void SHA256_Process( OUT SHA256_INFO *Info, IN const BYTE *pszMessage, IN UINT uDataLen )
{
if ((Info->uLowLength += (uDataLen << 3)) < 0)
Info->uHighLength++;
Info->uHighLength += (uDataLen >> 29);
while (uDataLen >= SHA256_DIGEST_BLOCKLEN)
{
memcpy((UCHAR_PTR)Info->szBuffer, pszMessage, (SINT)SHA256_DIGEST_BLOCKLEN);
SHA256_Transform((ULONG_PTR)Info->szBuffer, Info->uChainVar);
pszMessage += SHA256_DIGEST_BLOCKLEN;
uDataLen -= SHA256_DIGEST_BLOCKLEN;
}
memcpy((UCHAR_PTR)Info->szBuffer, pszMessage, uDataLen);
}
보면 함수의 입력 부분에서 ...( OUT SHA256_INFO * INFO, ..)
이렇게 입력을 받는데요 미리 정의한 구조체 변수 *Info
를 넣는건 지금까지 그래왔으니 알겠는데, 뒤에 OUT
가 어떤 의미로 붙는건지를 모르겠어요
2 답변
-
IN
과OUT
은 함수의 인자가 입력으로 사용되는지, 출력으로 사용되는지를 나타냅니다.c 에서는 함수의 반환값으로 기본데이터형 하나씩을 가질 수 있지만, 실제 코딩을 하다보면, 함수 수행 후 기본데이터형이 아닌, 또는 여러개의 결과값을 받아올 필요가 있을때가 있습니다.
이럴 때 결과를 받기 위한 버퍼포인터 등을 함수의 인자로 넘겨주는 경우가 있습니다. 이럴 경우
IN
,OUT
등을 명시해서 함수의 인자의 성격을 명확하게 할 수 있습니다.질문의 예에서
info
,pszMessage
는 모두 함수인자이지만,pszMessage
의 데이터를 주고,info
에 데이터를 조작한 결과를 받아오게 됩니다. 그래서 각각OUT
,IN
을 명시해 준 것입니다. -
저거 컴파일러가 바뀌었을 때 컴파일 오류 안 나려고 저러는 걸걸요
IN, OUT 이라는 키워드를 지원하지 않는 컴파일러에선 저게 없으면 컴파일 에러가 날테니까요.
MS 컴파일러의 경우 제시해주신 것 같은 컴파일러 확장 기능이 종종 있습니다. 경우에 따라 다르지만 ifndef define 하는 걸로 봐선 별 의미는 없고 의미 태깅용인 거 같네요.
댓글 입력