- 매크로로 print 하기
1
2
3
4
5
6
|
#include<iostream>
#define PRINT_HELLO std::cout << "Hello" << std::endl;
int main(){
PRINT_HELLO
}
|
cs |
여기서 주의할 점은 매크로의 별명은 띄어쓰기하면 안된다.
별명은 여기선 PRINT_HELLO를 말하는 것.
- 매개 변수가 있는 매크로
1
2
3
4
5
6
7
8
9
|
#include <iostream>
#define SQUARE(X) X*X
int main(){
int a;
std::cin >> a;
std:: cout << SQUARE(a) << std::endl;
}
|
cs |
- 매개 변수가 있는 매크로에서의 괄호의 중요성
1
2
3
4
5
6
7
8
9
|
#include <iostream>
#define SQUARE(X) X*X
int main(){
int a;
std::cin >> a;
std:: cout << 100 / SQUARE(a) << std::endl;
}
|
cs |
5를 입력하면, 4가 출력될 것이라고 예상하기 쉽지만 실제로 출력한 결과 100이 출력된다.
그 이유는, SQUARE(a)를 매크로로 정의한 것으로 바꾸어 보면,
100 / a * a가 되기에,
A가 5라면,
100 / 5 * 5
따라서 결과는 100이 된다.
이런 점들을 주의하기 위해, 매크로를 만들 때부터, 괄호를 쳐 주면 좋음.
이런식으로,
1
|
#define SQUARE(X) (X*X)
|
cs |
1
2
3
4
5
6
7
8
9
10
|
- #include <iostream>
-
- #define SQUARE(X) (X*X)
-
- int main(){
- int a;
- std::cin >> a;
- std:: cout << SQUARE(a-1) << std::endl;
- }
|
cs |
4의 제곱인 16이 출력될 것이라고 예상하기 쉽지만 -1로 출력된다.
이 출력물도 위의 이유와 같은 이유인데,
SQUARE(a-1)은 (a-1*a-1)과 같다.
따라서 (5-1*5-1) = -1 이기 때문이다.
1
|
#define SQUARE(X) ((X)*(X))
|
cs |
헷갈리지 않기 위해, 처음부터 이렇게 매크로를 정의하는 것이 더욱 편리하다.
- 매개 변수가 두 개인 매크로
1
2
3
4
5
6
7
8
9
|
#include <iostream>
#define MAX(A,B) (((A) > (B)) ? (A) : (B))
int main(){
int a = 5, b = 10;
std::cout << MAX(a, b);
}
|
cs |
여기서,
1
|
#define MAX(A,B) (((A) > (B)) ? (A) : (B))
|
cs |
의 의미는
? 의 앞에가 조건문이 된다.
(A>B) 가 만족된다면, A를 출력,
만족되지 않는다면, B를 출력한다.
-매크로로 for문 만들기
1
2
3
4
5
6
7
8
9
|
#include <iostream>
#define FOR(I, S, E) for(int I = S; I <= E; I++ )
int main(){
FOR(i, 1 , 10){
std::cout << i << std::endl;
}
}
|
cs |
여기서
FOR(i, 1, 10)이
for(int i = 1; i <= 10; i++) 이라는 의미이기 때문에 정상적으로 for문이 작동된다.
- 매크로로 무한루프 만들기
1
2
3
4
5
6
7
8
9
|
#include <iostream>
#define LOOP while(true)
int main(){
LOOP{
std::cout << "*";
}
}
|
cs |
별이 무한으로 출력된다.
출처(source) - 유튜브 두들낙서님
https://www.youtube.com/c/%EB%91%90%EB%93%A4%EB%82%99%EC%84%9C
c++ 최고의 강좌,,
'공부 > c++' 카테고리의 다른 글
#15 상수 만들기 | const | 매크로 | enum | c++ (0) | 2021.09.20 |
---|---|
#14 이중 포인터와 typedef (0) | 2021.09.20 |
#13 구조체 포인터 | c++ (0) | 2021.09.20 |
#12 구조체 | struct | c++ (0) | 2021.09.20 |
#11 typedef (0) | 2021.09.20 |