본문 바로가기
공학/C

전처리기

by 둥둥잇 2014. 11. 18.


* 전처리기

- 컴파일하기 전에 소스 파일을 처리하는 컴파일러의 한 부분


#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



'공부 > C' 카테고리의 다른 글

동적 메모리  (0) 2014.11.19
문자와 문자열  (0) 2014.11.18
공용체  (0) 2014.11.18
구조체  (0) 2014.11.18
함수와 포인터  (0) 2014.11.18

댓글