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 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    INOUT 은 함수의 인자가 입력으로 사용되는지, 출력으로 사용되는지를 나타냅니다.

    c 에서는 함수의 반환값으로 기본데이터형 하나씩을 가질 수 있지만, 실제 코딩을 하다보면, 함수 수행 후 기본데이터형이 아닌, 또는 여러개의 결과값을 받아올 필요가 있을때가 있습니다.

    이럴 때 결과를 받기 위한 버퍼포인터 등을 함수의 인자로 넘겨주는 경우가 있습니다. 이럴 경우 IN, OUT 등을 명시해서 함수의 인자의 성격을 명확하게 할 수 있습니다.

    질문의 예에서 info, pszMessage 는 모두 함수인자이지만, pszMessage의 데이터를 주고, info에 데이터를 조작한 결과를 받아오게 됩니다. 그래서 각각 OUT, IN을 명시해 준 것입니다.

  • 저거 컴파일러가 바뀌었을 때 컴파일 오류 안 나려고 저러는 걸걸요

    IN, OUT 이라는 키워드를 지원하지 않는 컴파일러에선 저게 없으면 컴파일 에러가 날테니까요.

    MS 컴파일러의 경우 제시해주신 것 같은 컴파일러 확장 기능이 종종 있습니다. 경우에 따라 다르지만 ifndef define 하는 걸로 봐선 별 의미는 없고 의미 태깅용인 거 같네요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)