다음을 통해 공유


함수와 매크로 선택 하기 위한 권장 사항

대부분의 Microsoft 런타임 라이브러리 루틴 컴파일된 또는 조립 기능을 하지만 일부 루틴 매크로로 구현 됩니다.헤더 파일 함수와 매크로 버전의 루틴을 선언 하면 함수 선언 후 항상 나타나기 때문에 매크로 정의 우선 합니다.함수 및 매크로 모두로 구현 되는 루틴을 호출 하는 경우 두 가지 방법으로 함수 버전을 사용 하도록 컴파일러를 강제할 수 있습니다.

  • 루틴의 이름을 괄호로 묶어야 합니다.

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use 
                        // function version of toupper.
    
  • "매크로 정의에 정의 되지 않은"는 #undef 지시문:

    #include <ctype.h>
    #undef _toupper
    

함수는 라이브러리 루틴의 매크로 구현을 선택할 경우 다음과 같은 장단점을 고려해 야 합니다.

  • 크기와 속도 매크로 사용 하 여의 주요 장점은 빠른 실행 시간입니다.전처리 하는 동안 매크로 (정의 의해 교체) 확장 된 인라인 될 때마다 사용 됩니다.함수 정의 호출 횟수에 관계 없이 한 번만 발생 합니다.매크로 코드 크기 증가 하지만 함수 호출에 관련 된 오버 헤드가 없습니다.

  • 함수를 실행 ; 주소를 함수 계산 매크로 지원 하지 않습니다.따라서 매크로 이름에 대 한 포인터를 필요로 하는 컨텍스트에서 사용할 수 없습니다.예를 들어에 대 한 포인터를 함수에 있지만 없는 매크로에 대 한 포인터를 선언할 수 있습니다.

  • 형식 검사 함수를 선언할 때 컴파일러 인수 형식을 확인할 수 있습니다.매크로 선언할 수 없습니다 때문에 컴파일러가 매크로 인수 형식을 확인할 수 없습니다. 매크로에 전달할 인수를 확인할 수 있습니다.

참고 항목

참조

CRT 라이브러리 기능