Programming/C++

Inline 함수, 매크로 함수

byeong07 2018. 9. 10. 23:30

 

- 매크로(define)

 

- 여러 번 사용하게 될 상수를 문자로 표현하여 변경 시에 편리하게 사용할 수 있도록 하는 것

 

- 이러한 매크로 상수는 컴파일 전에 전처리기에 의해 숫자로 치환됩니다.

 

  #define [이름] [숫자]

 

 

- 매크로 사용 예시

 

 

 

MAX_LEN이란 매크로를 사용하지 않고 20으로 채웠을 경우

 

데이터의 양이 변경되어 25까지 계산한다면 하나씩 변경해야 하지만

 

매크로를 사용하면 하나만 변경하면 전체가 변경되어 사용하기 편리합니다.

 

 

- 매크로(define) 함수

 

- 매크로를 이용하여 함수의 역할을 대신하는 것입니다.

 

- 파라미터를 받을 수 있으며 반환할 수 있다.

 

- #define은 치환을 하므로 함수와 다르게 예상하는 결과 값과 다른 경우가 존재한다.

 

- #define은 전처리기 영역에서 단순 치환이므로 컴파일에서 발생하는 데이터 타입에 관한 문제는 발견하지 못한다.

 

  #define [함수이름](인자, 인자) [계산]

   ex) #define SUM(a, b) (a+b)

 

- 매크로(define) 함수 예시

 

 

출력 결과

 

 

첫 번째, 두 번째까지는 정상적으로 동작한다.

 

세 번째 매크로 함수와 네 번째 일반 함수의 동작이 같을 것이라 예상하고

 

프로그램을 실행했지만 결과는 다릅니다.

 

이는 #define 매크로는 단순 치환을 하기 때문입니다.

 

MUL(10+3, 20+2)는 전처리기에 의해 10 + 3 * 20 + 2로 계산이 되어 10 + 60 + 2 = 72가 나오게 된다.

 

일반 함수(func_mul)과 같은 결과가 나오게 하려면

 

#define MUL(a, b) ((a) * (b))와 같이 선언을 해야 합니다.

 

 

- inline(인라인)

 

- 매크로 함수의 단점을 보완하고자 일반 함수의 성향을 빌려온 함수

 

- 컴파일러가 지능적으로 판단하여 인라이닝을 하는 것이 이득이라면 치환을 해주고

 

  그렇지 않으면 일반 함수처럼 동작한다.

 

- inline은 함수 호출처럼 스택으로 불리는 것이 아니라 치환되어 사용된다.

 

- 함수 선언 시에 inline을 앞에 붙이면 된다.

 

 inline int func_mul(int a, int b) {return a * b}

 

 

- inline 함수의 사용과 예시

 

 

 

 

 

- 매크로(define)는 전처리기에 의해 치환(처리)됩니다.

 

  inline은 컴파일러의 판단에 의해 처리됩니다.

 

  inline은 data type을 정의해야 하지만 매크로(define)은 그렇지 않습니다.


 

'Programming > C++' 카테고리의 다른 글

입출력 개요에 대한 두 번째 정리  (0) 2018.06.06
c++ 입출력 개요  (0) 2018.06.06