개발자 데뷔!

[C/C++ 8.0] 매크로(Macro) 함수 본문

프로그래밍 언어/C

[C/C++ 8.0] 매크로(Macro) 함수

물꼮이 2022. 3. 11. 22:03

1. 매크로 사용법)
  #define NAME 치환할값
  -> NAME이 치환할값으로 치환됨, 상수, 함수 둘다 가능


2. 매크로 사용이유)
  가독성향상/코드수정용이/빠름
  메모리차지하지않음_메모리할당X, 전처리기단계에서 문자열 자체를 치환 => 컴파일 전 치환됨


3. 매크로 사용규칙)
  #include 아래에 위치/ 전부대문자
  ex) SIZE등을 매크로로 지정


4. 유의사항***)
  함수값이 달라질 수 있음 


  ex) #define func(x) x*x 에서, func(2+5)를 호출하면 
      7*7 =49 가 아닌, 2+5*2+5 = 17 이 호출됨


  ex) #define max_macro(x,y) (x>y?x:y) 대신 전체괄호를 뺀 
  #define max_macro(x,y) x>y?x:y 를 사용하면, 2*max(3,2)를 호출하면
  2*(3>2?3:2) =2*(3)=6 이 아닌, 2*3>2?3:2 즉 (6)>2?3:2 =3 이 호출됨


  ex) max(3,i++)같은 것도 문제됨


  ?? 책 p.22쪽 / code complete 책추천 / 시간오래걸릴수도 있음