▣ 안녕하세요.
이번장에서는 C++에서 매크로와 인라인을 공부해보겠습니다.
매크로는 우리는 C언어에서 #define으로 정의를 하는 부분과 동일합니다.
#define PI 3.1412
이렇게 main함수 밖에서 #include와 함께 적었던 코드 기억하시죠.
그럼 PI라는 상수 기호가 3.1412 값으로 정의가 되는 걸 했던 기억을 있을 겁니다.
#은 전처리기고 컴파일하기전에 처리해주는 걸 의미합니다.
그렇기 때문에 int PI = 3.1412 이렇게 선언 및 정의를 해준 것보다 과정에서도
컴파일 전에 하기 때문에 적겠죠?
이 부분을 기억하시고 이제 매크로를 활용하여 함수를 정의해보겠습니다.
▣ 매크로 함수를 정의하려면 함수를 정의하는 것과 거의 동일합니다.
함수 이름 앞에 #define을 붙어주시고 SUM(매개변수) 반환 값을 넣어주시면 됩니다.
그리고 SUM(10, 20)함수를 호출해서 값을 출력해보면 30이 반환돼서 출력되는 걸 확인할 수 있습니다.
▣ 이번에는 매개변수 값에 문자열로 잘못된 타입으로 값을 넣어보겠습니다. 그럼
이상하게 오류가 나지 않고 강제로 출력이 되는걸 확인할 수 있습니다.
그건 전처리기는 컴파일 전에 숫자로 치환하기 때문입니다.
그래서 컴파일 과정에서 데이터타입(자료형)에 관한 오류를 발견하지 못한다는 단점이 있습니다.
▣ 그리고 이렇게 곱하기를 했을 경우에도
숫자로 바로 치환하기 때문에 10+1을 더한 11 * 22를 곱해야 하는데
10 + 1 * 20 + 2로 숫자를 치환해서 * 곱하기부터 연산을 하고 값을 반환해서
잘못된 값이 나오게 됩니다.
이걸 보완하기 위해 만들어진 게 바로 inline입니다.
▣ 함수를 정의하는 것과 동일하게 만들고 그 자료형 반환형 앞에 inline을 붙어주시면 됩니다.
그럼 정상적으로 10 + 1, 20 + 2를 하고 난 후에 11 * 22를 곱해 값을 반환해 줍니다.
다시 정의하면 inline은 컴파일러가 판단해서 인라인을 할지 일반 함수로 동작할지 판단해서 값을 치환해주게 됩니다.
▣ 그리고 아까처럼 문자열로 매개변수 값을 잘못 넣었을 경우에도 오류가 나오는 것도 확인할 수 있습니다.
▣ 매크로와 인라인에 차이점을 꼭 직접 실습해보면서 공부해주세요.
'[ C++ ] > - C++ 실습연습' 카테고리의 다른 글
C++ [파일입출력] (0) | 2021.10.15 |
---|---|
C++ [템플릿_01, template, typename] (0) | 2021.08.19 |
C++ [레퍼런스변수, 포인터, 주소, 참조] (0) | 2021.07.23 |
C++ [클래스_02, Class, get, set, 함수, 멤버함수, 멤버변수] (0) | 2021.07.21 |
C++ [클래스_01, Class, 객체, 멤버변수, 멤버함수, 접근지정자] (2) | 2021.07.20 |
댓글