Coding/Tip !!

매크로 함수

IMyoungho 2018. 10. 3. 07:23

매크로(define)
자주 사용하게 되는 상수 등을 문자형식으로 나타내어 편리하게 사용하게 하는 것이다.

매크로 상수는 컴파일 전에 전처리기에 의해서 미리 치환되며 변수이용보다 처리속도가 빠르다.

#define을 사용하며 매크로 정의 시 앞부분에 써주면된다.

보통 대문자로 많이 정의하며 가독성을 높여주고 유지보수를 편하게 해준다.


Tip!

#은 전처리기의 의미로 컴파일,빌드 하기 전에 진행한다는 의미이다.


매크로 함수

[형식]

#define 매크로 상수이름 문자열 or 숫자

#define 매크로상수이름(인자) 수식 or 문자열 or 숫자



아래는 매크로 함수예시이다. 삼항연산자를 이용하였다.

삼항연산자 -> (조건식) ? (참 일때) : (거짓 일때) 

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>

using namespace std;
 
#define MAX(a, b) ((a > b) ? a : b) -> 삼항연산자를 괄호로 감싸야 사용가능함 없으면 에러발생
 
//#define MAX(a, b) (((a) > (b)) ? (a) : (b)) -> 위와같음, 단순히 숫자가아닌 1+3같이 뭔가 수식이 들어가게되면 
//                                               제대로 값이 나오지 않을 수 있기 때문에 괄호를 더 넣어준 경우임
int main(){
    cout << MAX(7,2<< endl;
    cout << MAX(5+8*7,111<< endl;
    return 0;
}








매크로 함수 사용 시 주의사항!!

아래와 같은 코드가 있다.


main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include "test.h"
 
#define MAC
 
using namespace std;
 
void testname();
 
int main()
{
    testname();
    return 0;
}




test.h

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
using namespace std;
 
void testname()
{
    #ifdef MAC
        cout << "PRO" << endl;
    #else
        cout << "AIR" << endl;
    #endif
 
}



이 경우 결과는 예상과 다르게  "PRO"가 출력되지 않는다.

MAC이 이미 main.cpp에 #define이 되어있는데도 불구하고 "AIR"가 출력된다.

그 이유는 매크로의 효력 범위가 정의된 파일에서만 가능하기 때문이다.

반응형