본문 바로가기
[ CODING STUDY ]/》C++ 코드실습

C++ [매크로, inline, #define]

by MRG 2021. 7. 30.
728x90
반응형

▣ 안녕하세요. 

이번장에서는 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은 컴파일러가 판단해서 인라인을 할지 일반 함수로 동작할지 판단해서 값을 치환해주게 됩니다. 

 

▣ 그리고 아까처럼 문자열로 매개변수 값을 잘못 넣었을 경우에도 오류가 나오는 것도 확인할 수 있습니다.

 

▣ 매크로와 인라인에 차이점을 꼭 직접 실습해보면서 공부해주세요.

728x90
반응형

댓글