* 전처리기
- 컴파일하기 전에 소스 파일을 처리하는 컴파일러의 한 부분
#define 매크로 정의
#include 파일 포함
#undef 매크로 정의 해제
#if, #else, #endif 조건에 따른 컴파일
#ifdef, #endif 매크로가 정의되어 있는 경우이 컴파일
#ifndef, #endif 매크로가 정의되어 있지 않은 경우의 컴파일
#line 행번호 출력
* 단순 매크로
#define을 이용해 숫자 상수를 기호 상수로 만드는 것
#define PI 3.141592
* #define과 typedef의 차이점
#define UCHAR unsigned char
typedef unsigned char UCHAR;
typedef은 컴파일러에 의해 처리 / 새로운 자료형을 정의했으므로 컴파일러가 컴파일 내내 그 의미를 알고 있음
#define은 전처리기에 의해 처리 / 단순한 텍스트의 기계적인 대치 / 상수 대신 원래대로 바뀌어서 컴파일
* 함수 매크로
- 함수처럼 매개 변수를 가지는 것
#define SQUARE(x) ((x)*(x))
매크로를 찾아 텍스트로 바꿔준다
v = SQUARE(3); => v = ((3)*(3));
- 함수 매크로에서는 매개 변수의 자료형을 써주지 않아 어떠한 자료형에 대해서도 적용 가능
- 매크로를 정의할 때 매개변수는 모두 사용되어야 함
- 매크로 이름과 괄호 사이에 공백이 있으면 안됨
* 매크로를 멀티 라인으로 작성하기
라인의 끝에 \을 사용
ex)
#define PRETTY_PRINT(s) \
printf("Message: \"%s\"\n", \
s);
* 비트 연산자
& 비트 AND
| 비트 OR
^ 비트 XOR
<< 왼쪽으로 이동 : 지정된 개수만큼 모든 비트를 왼쪽으로 이동
>> 오른쪽으로 이동 : 지정된 개수만큼 모든 비트를 오른쪽으로 이동
~ 비트 NOT
int main(void)
{
int x = 9; // 1001
printf("비트 << = %08X\n", x<<2) // 100100
printf("비트 >> = %08X\n", x>>2) // 000010
return 0;
}
-------실행결과
비트 << = 00000024
비트 >> = 00000002
댓글