다음을 통해 공유


인라인 함수 및 매크로

있지만 (함수 코드가 호출을 컴파일 타임에 확장 된 때문에) 인라인 함수 매크로 비슷한입니다, 인라인 함수를 매크로 전처리기에서 확장 되는 반면 컴파일러에 의해 분석 됩니다.따라서, 몇 가지 중요 한 차이점이 있습니다.

  • 모든 프로토콜의 일반 기능에 적용 된 형식 안전 인라인 함수를 수행 하십시오.

  • 여기에 포함 되어를 제외 하 고 다른 함수로 동일한 구문을 사용 하 여 인라인 함수를 지정은 인라인 키워드를 함수 선언에 있습니다.

  • 인라인 함수에 인수로 전달 된 식은 한 번 계산 됩니다.경우에 따라 매크로에 인수로 전달 된 식은 두 번 이상 평가할 수 있습니다.

예제

다음 예제에서는 소문자를 대문자로 변환 하는 매크로 보여 줍니다.

// inline_functions_macro.c
#include <stdio.h>
#include <conio.h>

#define toupper(a) ((a) >= 'a' && ((a) <= 'z') ? ((a)-('a'-'A')):(a))

int main() {
   char ch;
   printf_s("Enter a character: ");
   ch = toupper( getc(stdin) );
   printf_s( "%c", ch );
}
  
  

식의 의도 toupper(getc(stdin)) 는 문자를 콘솔 장치에서 읽을 것입니다 (stdin)와 필요에 따라 변환 하는 경우 대문자로.

매크로의 구현 때문에 getc 를 실행 하 고 결정 하는 문자에 "a" 보다 크거나 인지 일단 결정 합니다 "z" 보다 작거나 같음 여부 후 그 범위에 있는 경우 getc 문자를 대문자로 변환 하려면 다시 실행 됩니다.즉, 두 개 또는 세 개의 문자를 대기 하는 프로그램, 원칙적으로 하나만을 기다려야 합니다.

앞에서 설명한 문제를 해결 하는 인라인 함수:

// inline_functions_inline.cpp
#include <stdio.h>
#include <conio.h>

inline char toupper( char a ) {
   return ((a >= 'a' && a <= 'z') ? a-('a'-'A') : a );
}

int main() {
   printf_s("Enter a character: ");
   char ch = toupper( getc(stdin) );
   printf_s( "%c", ch );
}
  
  

참고 항목

참조

인라인, __inline, __forceinline