- 매크로(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 |