전처리문(#include, #define, #ifdef...)
컴파일 이전에 미리 처리되는 문장(=선행처리기)로 소스코드를 지우지 않고 활성화/비활성화 하는데 이용된다. 첫문자는 '#'를 사용
전처리문의 종류
#include
//파일처리를 위한
#define,
#undef //형태 정의를 위한
#in,
#ifdef, #else, #elif, #endif //조건 처리를 위한
#error //에러 처리를 위한
#line
//디버깅을 위한
#pragma
//컴파일 옵션 처리를 위한
#include : 외부파일을 읽어서 포함시키자 할 때 사용
#include
<stdio.h> // <>는 표준 포함 디렉토리 검사
#include
"NewMonster.h" // ""현재 폴더 기준 검사
#define : 상수값 지정을 위한 매크로
#define
SUM(x) ((x) = (x) + (x))
#define
MYFILENAME = "Myfile"
#undef : 이미 정의된 매크로를 무시
#define
ADD(a, b) (a+b)
#undef
ADD(a, b) //앞에 정의된 ADD가 'undefined symbol' 처리
#if~
#endif : 어떤 구문을 컴파일 할지 말지를 결정
#define
A 1 //A는 1이기 때문에 true
#if A
source code… //컴파일 됨
#endif
#ifdef
~ #endif : 컴파일 시
#define
MYDEF
#ifdef
MYDEF2
#define BASE 10 //BASE = 10
#elif
MYDEF
#define BASE 2 //BASE = 2
#endif
//BASE는 2가 된다
#ifndef 헤더명_H__ ~ #endif
: 헤더 값 중복을 방지
#ifndef
STDIO_H__ //STDIO_H가 선언되지 않았다면
#define STDIO_H__ //STDIO_H를 선언
#defined : define이
여러 개 정의되어있는지 확인
#if
#defined A || #defined B
#ifdef와 #if defined의 차이점
#ifdef는 정의가 되었는지 확인을 한번에 여러 개 할 수 없다.
#if
defined(MACRO1) || defined(MACRO2)
= #if
MACRO1 || MACRO2
#error : 소스라인에서 #error을 만나면 컴파일을 멈추고 메시지를 출력한다.
#ifdef
__LARGE__
#error This program must be compiled in
LARGE memory model!
#endif
//#ERROR
: 현재컴파일중인파일명 행번호 ErrorDirective내용
#line
: 소스코드에 행 번호를 지정하기 위한 것. 미리 정의된 __LINE__와 사용
__LINE__
(행 번호), __FILE__(파일 명)
#pragma : 컴파일러에게 명령 전달 지시어
#pragma
inline : 컴파일시 어셈블러를 사용하도록 지시
#pragma
savereges : 휴즈 메모리 모델에 대해 컴파일 된 함수를 레지스터에 저장
#pragma
warn //Turbo C에게 경고 메시지 무시 옵션
#pragma
warn -par //매개변수가 사용되지 않았다고 경고를 내지 못하도록 한다.
#pragma
warn +par //위와 반대표현
Cf)
(-)는 경고 OFF, (+)는 경고 ON, 예로 명령행에서 -wxxx 경고 ON, -w-xxx 경고 OFF
Par
: 전해진 파라미터 미사용
Rvl
: void형이 아닌 함수에서 리턴 값 없음
Aus
: 변수에 값을 할당했으나 사용하지 않음
Voi
: void함수에서 리턴값 사용되지 않음
Sig
: 부호비트가 고려되지 않은 형변환에서 부호 비트 소실 가능성
C의 미리 정의된 매크로
__FILE__ //컴파일된 파일의 경로
__LINE__ //현재 행번호를 유지하는 정수
__DATE__ //현재 시스템 날짜를 가진 문자열
__TIME__ //현재 시스템 시간을 가진 문자열
__STDC__ //값 1을 정의하는 ANSI C표준
__cplusplus //c,c++모드 인 경우 c++로 정의
cf) #define 정의__ : 왜 뒤에 '_' 나 '__'를 붙였을까? 암시적 약속이다.
참조 블로그
cf)msdn 미리 정의 된 매크로
cf) #define 정의__ : 왜 뒤에 '_' 나 '__'를 붙였을까? 암시적 약속이다.
참조 블로그
cf)msdn 미리 정의 된 매크로
0 개의 댓글:
댓글 쓰기