매크로
2022. 4. 9. 01:02ㆍC++
#define을 이용해 다음과 같은 코드가 가능하다.
#include<iostream>
using namespace std;
#define PRINT_HELLO cout<<"HELLO"<<endl;
int main(void)
{
PRINT_HELLO; //HELLO 출력
return 0;
}
함수에서의 매크로
int square(int a){
return a*a;
}
위와 같은 함수를 아래와 같이 매크로 함수로 만들수 있다.
#define SQUARE(X) X*X
위는 아래와 같은 문제가 발생한다.
#include <iostream>
using namespace std;
#define SQUARE(X) X*X
int square(int a){
return a*a;
}
int main(){
int a = 5;
cout<<100/square(a)<<endl; // 4, 100/25 = 4
cout<<100/SQUARE(a)<<endl; //100, 100/5*5 = 100
return 0;
}
물론 이는 전체 식에 괄호를 침으로써 해결할 수 있다.
#define SQUARE(X) (X*X)
하지만 이는 끝이 아니다.
#include <iostream>
using namespace std;
#define SQUARE(X) (X*X)
int square(int a){
return a*a;
}
int main(){
int a = 6;
cout<<square(a-1)<<endl; // 25, 5*5
cout<<SQUARE(a-1)<<endl; //-1, 6-1 * 6-1 = -1
return 0;
}
그렇기에 각 요소에도 괄호를 침으로써 더욱 안전한 식을 만들어야 한다.
#define SQUARE(X) ((X)*(X))
매개변수가 두 개인 매크로 함수
아래와 같이 최댓값을 반환하는 함수가 있다고 하자.
int max(int a, int b){
// if (a > b) return a;
return (a>b) ? a : b; //삼항 연산자.
}
이는 아래와 같이 매크로 함수를 만들 수 있다.
#define MAX(A,B) (((A)>(B)) ? (A) : (B))