일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프론트엔드 개발자
- 오버워치
- abex crack me 1번
- 메이플스토리 M 사전예약
- react native
- 배열 정렬
- abex crack me 5번문제
- 마인크래프트
- 리틀엔디언
- 안드로이드 백도어
- UDP daytime
- 빅엔디언
- 레나 리버싱
- 덧셈
- 네트워크 관리사 2급 필기
- 프로그래밍 언어론
- Reverse Me
- 리버싱
- C언어
- 1.9.2
- 구조체
- sa 계정 비밀번호 변경
- 재밌는 모바일게임
- 배열
- 알고리즘
- 구조체 함수
- c언어 알고리즘
- 암호화폐
- 배열 탐색
- abex crack me 2번 문제풀이
- Today
- Total
Gyejoong's Information
[C언어]전처리 및 비트필드 본문
1. 전처리기
전처리기(preprocessor)는 본격적으로 컴파일하기에 앞서서 소스 파일을 처리하는 컴파일러의 한 부분이다. 전처리기는 보통 컴파일러에 포함되어 있고 자동으로 실행되며 컴파일러의 하나의 요소로 취급된다.
전처리기는 소스파일을 처리하여 수정된 소스 파일을 생산한다. 이 수정된 소스 파일은 다음 단계의 컴파일러 프로그램에 의하여 본격적으로 컴파일된다. 보통 이 수정된 소스 파일은 컴파일 과정이 끝난 다음에 삭제되기 때문에 사용자에게는 보이지 않는다.
전처리기는 몇 가지의 전처리기 지시자들을 처리한다. 이들 지시자들은 # 기호로 시작한다. # 기호는 문장의 첫번째 문자이어야 한다. 우리가 헤더 파일을 포함하기 위하여 사용하였던 #include가 바로 전처리기 지시어이다.
자세히 들어가기에 앞서서 전처리기에서 사용되는 지시자들을 표로 정리하였다.
지시어 |
의미 |
#define |
매크로 정의 |
#include |
파일 포함 |
#undef |
매크로 정의 해제 |
#if |
조건이 참일 경우 |
#else |
조건이 거짓일 경우 |
#endif |
조건 처리 문장 종료 |
#ifdef |
매크로가 정의되어 있는 경우 |
#ifndef |
매크로가 정의되어 있지 않은 경우 |
#line |
행번호 출력 |
#pragma |
시스템에 따라 의미가 다름 |
2. 단순매크로
#define 지시자를 이용하여 숫자 상수에 의미 있는 이름을 부여할 수 있다. #define 문을 이용하여 숫자 상수를 기호 상수로 만든 것을 단순 매크로(macro)라고 한다.
형식 |
#define 기호상수 텍스트 |
예 |
#define PI 3.141592 |
설명 |
기호상수를 찾아서 텍스트로 바꾼다. |
많이 사용되는 매크로의 예를 살펴보자.
#define |
PI |
3.141592 // 원주율 |
#define |
TWOPI |
(3.141592 * 2.0) // 원주율의 2배 |
#define |
MAX_INT |
2147483647 // 최대정수 |
#define |
EOF |
(-1) // 파일의 끝표시 |
#define |
MAX_STUDENTS |
2000 // 최대 학생수 |
#define |
EPS |
1.0e-9 // 실수의 계산 한계 |
#define |
DIGITS |
"0123456789" // 문자 상수 정의 |
#define |
BRACKET |
"(){}[]" // 문자 상수 정의 |
#define |
getchar() |
getc(stdin) // stdio.h에 정의 |
#define |
putchar() |
putc(stdout) // stdio.h에 정의 |
3. 함수매크로
4. #ifdef, #endif
5. #if, #else, #endif
6. 비트 필드 구조체
'Study > C' 카테고리의 다른 글
[C언어]return과 break의 차이점 비교하기. (0) | 2016.11.04 |
---|---|
[C언어]포인터와 이중포인터 (0) | 2016.06.25 |