본문 바로가기
공부/c++

#16 매크로 자세히 알아보기 | c++

by 심심한 뾰 2021. 9. 20.
반응형

- 매크로로 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++ 강좌를 올리고 있고 다른 컨텐츠는 할 수도 있고 안 할 수도 있는 채널. ▶ 두들낙서 지식공유 서버 참가하기: https://discord.gg/y4SXcjU

www.youtube.com

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