I. #define
- 전체 파일에서 일련의 텍스트를 다른 텍스트로 대치하는 매크로
- #include<iostream>
- using namespace std;
- #define ABS(a) ((a)<0 ? -(a) : (a))
- int main()
- {
-
cout<<"ABS of -1 and 1 : "<<ABS(-1)<<' '<<ABS(1);
-
return 0;
- }
- 위와 같은 소스가 있을 경우 ABS대신에 컴파일시에 ((a)<0 ? -(a) : (a))로 대치되어서 계산이 된다.
II. #error
- 컴파일러가 이 지시자를 만나면 컴파일을 중단하도록 한다. 이 지시자는 우선 디버깅을 위해 사용한다.
#error message
- #error가 발생하면 message와 문장 번호가 디스플레이 된다.
- #include <stdio.h>
- int main(void) {
int i;
i = 10; - #error this is an error message
printf("%d", i); //이 줄은 컴파일되지 않는다. - return 0;
}
III. #if, ifdef,#ifndef,#else,#elif,#endif
-
기본 형태
- #if 상수표현식
- #ifdef 매크로이름
- #ifndef 매크로이름
- #else ,#elif : 이것 들은 if else elseif 문과 같은 형태이다.
- #nedif : #if,#ifdef,#ifndef 같은 것들을 끝낼때 쓴다.
-
기본 예시 (http://yatoyato.tistory.com/815 참고 하였습니다.)
- #define NUM 2 #if NUM == 1
printf("Num is 1");
#elif NUM == 2
printf("NUM is 2");
#elif NUM == 3
printf("NUM is 3");
#elif NUM == 4
printf("NUM is 4");
#endif
- #define NUM 2 #if NUM == 1
-
- #include <stdio.h>
- #define CHAR_SET 256
- int main(void) {
int i; - #if CHAR_SET == 256
printf("Displaying full ASCII character set plus extensions.\n");
#else
printf("Displaying only ASCII character set.\n");
#endif - printf("\n");
for(i=0; i<CHAR_SET; i++)
printf("%c", i); - return 0;
- }
- #ifndef와 #define과 #endif는 대부분 헤더 파일에서 볼수 있다.
IV. #include
- 컴파일러에서 다른 소스 파일을 읽고 컴파일하도록 한다.
-
기본 형태
-
#include<filename>
- <>로 되어있다면 기본 디렉토리(include폴더에 있는 것을 가져다가 쓴다.>
-
#include "filename"
- ""로 되어있다면 현재의 작업 디렉토리에 있는 파일을 불러서 쓴다.
-
- 주로 filename 보다는 헤더파일이다.
V. #line
- #line은 미리 정의된 식별자인 _LINE_과 _FILE_의 내용을 수정하기 위해 사용.
-
기본 형태
-
- #line number filename
VI. #pragma
- 다양한 명령을 컴파일러에 제공하기 위해 사용
VII. #undef
- 이전에 정의한 매크로 이름을 삭제한다.
-
기본 형태
- #undef 매크로 이름
- #include <stdio.h>
- #define DOG
- int main(void) {
#ifdef DOG
printf("DOG is defined");
#endif - #undef DOG
- #ifdef DOG
printf("This line is not compiled");
#endif - return 0;
}
- 위와 같은 소스 일때 undef 만나기 전까지는 DOG는 정의 되어 있는 상태이다.
VIII.#와 ##프리프로세서 연산자
별로 필요 없는 것이므로 건너뜹니다.
VIIII.미리 정의된 매크로 이름들
-
_LINE_
- _FILE_
- _DATE_
- _TIME_
- _cplusplus_
- 예를 들어 다음 프로그램은 __LINE__을 100, __FILE__을 myprog.c로 변경한다.
- #include <stdio.h>
- int main(void) {
#line 100 "myprog.c"
printf("Compiling %s, line: %d, on %s, at %s", __FILE__, __LINE__, __DATE__, __TIME__); - return 0;
} - 이 프로그램이 July 3, 1995, 10 A.M.에 컴파일되었다고 가정하면, 이 프로그램은 다음과 같이 출력한다.
- Compiling myprog.c, line: 101, on Jul 3 1995, at 10:00:00
이 글은 스프링노트에서 작성되었습니다.