티스토리 뷰

함수로써 수행할 코드는 얼마 안되는데 함수 호출로 인한 오버헤드overhead가 더 커질 수도 있습니다.

 

그래서 나온 것이 매크로와 __inline입니다.

 

__inline은 넘어가도록 하겠습니다.

 

16.2.2 매크로 특수화 연산자 #, ##

 

#과 ##이 있습니다.

 

#은 인수가 무엇이든 모두 '문자열'로 만들어 줍니다.

 

##은 두 매개변수를 한 덩어리로 묶어 코드를 만들어주는 연산자입니다.

 

#include<stdio.h>

//a를 "a"(문자열)로 변경하는 매크로 정의
#define STRING(a) #a

//a와 b를 합쳐 하나로 붙여주는 매크로 정의
#define PASTER(a, b) a##b

int main(void)
{
    int nData = 10;
    
    //PASTER(nDa, ta)는 그냥 nData라고 쓴 것과 같다.
    printf("%d\n", PASTER(nDa, ta));
    printf("%d\n", nData);
    
    //"nData"로 처리된다.
    printf("%s\n", STRING(nData));
    return 0;
}

16.3 조건부 컴파일

 

조건부 컴파일은 상수 정의에 따라 실제로 번역되는 소스코드가 달라지도록 구성하는 것을 말합니다.

 

#if XXX, #else, #endif 이렇게 세 가지 전처리기를 사용해서 두 덩어리의 코드 중 하나만 선택해 배타적으로 컴파일할 수 있습니다.

 

#include<stdio.h>

//_MSGTEST_ 상수 정의가 돼쓴가 그렇지 안읂가에 따라
//MYMESSAGE 상수 정의는 달라진다.
#ifdef _MSGTEST_
#define MYMESSAGE "I am a boy"
#else
#define MYMESSAGE "You are a girl"
#endif

int main(void)
{
    //_MSGTEST_ 상수가 정의 된 경우와 그렇지 않은 경우 출력하는 문자열이 달라진다.
    puts(MYMESSAGE);
    return 0;
}

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함