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"가 출력된다.
그 이유는 매크로의 효력 범위가 정의된 파일에서만 가능하기 때문이다.
반응형