
__inline함수와 매크로는 코드의 재사용성과 실행속도를 개선
컴파일 타임에 모두 삽입 되어 실행된다.
차이점은
__inline함수는 실제 코드가 컴파일되어 삽입 된다. ==> 함수 호출 규약을 따름
매크로는 문자열 치환 개념
// 전처리기(preprocssor)는 컴파일러가 소스코드를 컴파일하기에 앞서 선행된느 구문
// 컴파일전에 실행된다.
// 직접 만든 헤더파일이 아니라면 보통 헤더파일은 등록된 위치에 모여 있다.
// '<>' 지정 방법과 " " 지정방법이 있다.
// "" 지정한 경로인 경우 := 시스템 경로가 아니라 프로젝트 경로
// '<>' 지정한 경로 경우 := 시스템 경로에서 탐색
// 매크로 => 함수가 아니다.=> 오버헤드가 발생하지 않는다.
// 매크로는 외형상으로 함수의 모습, 실제로 함수가 아니라 한행 혹은 여러행으로 기술할수 잇는 구문
// 일반적으로 매크로는 사용자가 여러함수기능을 묶어 따고 만든것.
// __inline함수
// 매크로의 발전 형태
#include <stdio.h>
#define ADD(a,b) (a+b)
#define ERROR_MSG(msg) printf("ERROR: %s\n",msg);
int Add(int a, int b)
{
return a + b;
}
int main()
{
printf("%d\n", ADD(3, 4));
printf("%d\n", ADD(3, 4) * 2);
ERROR_MSG("Failed to open file");
return 0;
}
#은 인수가 무엇이든 모두 문자열로 만들어주는 연산자
##은 두 매개 변수를 한덩어리로 묶어 코드를 만들어 주는 함수
#include <stdio.h>
#define STRING(a) #a
// a,b를 합쳐 하난로 붙여주는 매크로 정의
#define PASTER(a,b,c) a##b##c
int Add(int a, int b)
{
return a + b;
}
int main()
{
int nData1 = 10;
printf("%d\n", PASTER(nDa, t,a1));
printf("%d\n", nData1);
// nData1로 처리
printf("%s\n", STRING(nData1));
return 0;
}
조건부 컴파일은 상수 정의 따라 실제로 번역되는 소스코드가 달라지도록 구성한는것
// #은 인수가 무엇이든 모두 문자열로 만들어주는 연산자
// ##은 두 매개 변수를 한덩어리로 묶어 코드를 만들어 주는 함수
// 조건부 컴파일을 이용하여 할수 있는 가장 대표적인 것은 문자열 처리 => 유니코드 기반코드와 MBCS기반 코드
#include <stdio.h>
#define _MSGTEST_ "hi" // _MSGTEST_ 상수가 정의 1번 실행
#ifdef _MSGTEST_ // _MSGTEST_가 정의 되어 있다면 -- 1번
#define MYMESSAGE "Hello"
#else
#define MYMESSAGE "world" // _MSGTEST_가 정의 되어 있지 않다면 -- 2번
#endif
int main()
{
puts(MYMESSAGE);
return 0;
}
#include <stdio.h>
#define UNICODE
#ifdef UNICODE
typedef wchar_t TCHAR; //한글자당 2BYTE
#define _T(string) L##STRING // LSTIRNG을 L##STRING으로 처리(유니코드 형식)
#define PRINT wprintf // 유니코드 문자열 출력 함수 wprintf
#else
typedef char TCHAR;
#define _T(string)
#define PRINT printf
#endif
int main()
{
TCHAR szData[16] = _T("String"); // 2Byte
PRINT(_T("%s\n"), szData); // LSTIRNG형식으로 처리(유니코드 문자열로 처리)
PRINT(_T("%d, %d\n"), sizeof(TCHAR), sizeof(szData)); // 2byte *12
return 0;
}

Debug mode

Release mode
캡쳐를 보면 컴파일모드에 따라 컴파일모드가 활성화 된것을 알수 있다.