DDang goon
땅군 Programming
DDang goon
전체 방문자
오늘
어제
  • 분류 전체보기 (44)
    • Programming (35)
      • C++ (7)
      • C# (1)
      • 유니티 (2)
      • 자료구조 (0)
      • 언리얼엔진 (25)
    • 게임 (1)
      • 이론 (0)
      • 서버 (1)
    • 기타 (0)
      • 면접 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • TELNET 안될 때
  • 언리얼 엔진 애니메이션 블루프린트
  • 액터
  • 애니메이션 블루프린트
  • 텔넷
  • Telnet
  • 언리얼 블루프린트
  • 언리얼 엔진 액터
  • 애니메이션
  • 언리얼 애니메이션
  • TELNET 사용법
  • 언리얼 엔진
  • 텔넷 안될 때
  • 언리얼 뷰포트
  • 언리얼
  • 멀티터치
  • 동시터치
  • WINDOW10 TELNET
  • 뷰포트 설정
  • 더블터치

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DDang goon

땅군 Programming

Programming/C++

매크로 함수,인라인 함수

2020. 12. 23. 05:30

매크로 함수

매크로

여러번 사용하게 될 상수를 문자로 표현하는 방법이다.

매크로 상수는 컴파일 전 전처리기에 의해서 숫자로 치환된다.

 

장점

-가독성이 매우 좋아진다. 일반 상수를 적어 놓으면 알수 없지만 매크로를 이용해 이름을 써놓으면 인지하기 쉽다.

-상수 변경에 매우 용이하다. 일반 상수를 변경해야할 때는 일일이 변경해야하지만 매크로를 사용했다면 매크로 부분만 수정하면 된다.

 

매크로 함수

매크로를 이용하여 함수의 역할을 대신한다.

파라미터를 받을 수 있으며, 반환할 수 있다.

 

장점

-인수 타입을 신경쓰지 않아도 된다. 단순 치환만 해주기 때문에 신경쓰지 않아도 된다.

-함수호출에 의한 성능 저하가 없다.

단점

-단순 치환방식이라서 복잡한 함수의 기능은 구현하기 어렵다.

-#define은 전처리기 영역에서 단순 치환이기 때문에 결과가 다른 경우가 존재하며, 컴파일에서 발생하는 데이터 타입 문제는 발견하지 못한다.

#define MAX 100	//단순매크로
#define COUT std::cout //단순 매크로
#define ENDL std::endl //단순 매크로
#define SUM(a,b) a+b //매크로 함수
#define MUL(a,b) a*b //매크로 함수

void main()
{
    COUT << SUM(1, 2) << ENDL; //3
    COUT << MUL(2, 5) << ENDL; //10
    COUT << MUL(5+5, 3+3) << ENDL;  //23 (5+5*3+3) 
}

3번째 계산 MUL(5+5,3+3)에서 60이 아니고 23이 나온 이유는 단순 치환이기 때문에 전처리기에 의해

5+5*3+3으로 계산되었기 때문이다.

60으로 결과가 나오게 하려면 MUL(a,b) ((a)*(b))처럼 선언해주어야 한다.

 

인라인 함수

매크로 함수의 단점을 보완하고자 일반함수의 성향을 조금 빌려온 함수이다.

인라인 함수는 치환되어 사용된다.

인라인을 표시하지 않더라도 컴파일러에 따라 자동으로 인라인화를 할 수도 있다.

 

장점

-경우에 따라 일반 함수보다 실행 속도가 빠르다. 함수 호출 코드에 직접 인라인 함수의 코드가 치환되어 실행되기 때문에 주소 영역 점프가 필요하지 않기 때문이다.

단점

-매크로 함수와 다르게 데이터 타입을 판단해야 한다.

-코드 자체가 함수 호출단에 치환되기 때문에 메모리 쪽에서는 일반 함수보다 비효율적이다.

#define COUT std::cout
#define ENDL std::endl

inline int MUL(int a, int b)
{
	return a * b;
}
int main()
{
	COUT << MUL(3,5) << ENDL; //15
}

 

'Programming > C++' 카테고리의 다른 글

연산자 오버로딩  (0) 2021.01.04
범위 지정 연산자(::)  (0) 2020.12.23
매개변수의 디폴트 값  (0) 2020.12.23
비주얼 스튜디오 다중 문자열 검색  (0) 2020.08.04
[C/C++] C++에서 싱글톤을 사용하는 방법/Lazy initialzation  (0) 2019.09.16
    'Programming/C++' 카테고리의 다른 글
    • 연산자 오버로딩
    • 범위 지정 연산자(::)
    • 매개변수의 디폴트 값
    • 비주얼 스튜디오 다중 문자열 검색
    DDang goon
    DDang goon

    티스토리툴바