대부분의 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
함수는 라이브러리 루틴의 매크로 구현을 선택할 경우 다음과 같은 장단점을 고려해 야 합니다.
크기와 속도 매크로 사용 하 여의 주요 장점은 빠른 실행 시간입니다.전처리 하는 동안 매크로 (정의 의해 교체) 확장 된 인라인 될 때마다 사용 됩니다.함수 정의 호출 횟수에 관계 없이 한 번만 발생 합니다.매크로 코드 크기 증가 하지만 함수 호출에 관련 된 오버 헤드가 없습니다.
함수를 실행 ; 주소를 함수 계산 매크로 지원 하지 않습니다.따라서 매크로 이름에 대 한 포인터를 필요로 하는 컨텍스트에서 사용할 수 없습니다.예를 들어에 대 한 포인터를 함수에 있지만 없는 매크로에 대 한 포인터를 선언할 수 있습니다.
형식 검사 함수를 선언할 때 컴파일러 인수 형식을 확인할 수 있습니다.매크로 선언할 수 없습니다 때문에 컴파일러가 매크로 인수 형식을 확인할 수 없습니다. 매크로에 전달할 인수를 확인할 수 있습니다.