잘못된 정보일 수 있다.(!)
표준 C 기호
기초적인 전처리기 사용 예
표준 C 기호
__FILE__ | 이 기호가 쓰인 파일의 경로/이름(문자열) |
__LINE__ | 이 기호가 쓰인 라인 넘버(정수) |
__DATE__ | 이 기호가 쓰인 날짜(문자열) (컴파일 시점) |
__TIME__ | 이 기호가 쓰인 시간(문자열) (컴파일 시점) |
__STDC__ | 표준 C 컴파일러를 따른 다면 1을 나타냄. |
__cplusplus | C++ 컴파일러를 쓰면 1을 나타냄. |
기초적인 전처리기 사용 예
#define PI 3.14
/*이 것이 쓰인 '이후'의 코드에서 PI라는 문자를 보면 3.14로 치환한다. 대문자로 선언해서 변수는 소문자로 사용되는 것과 구별. */
#define NAME "Gil-Dong"
// 문자열로 치환하는 예
/*이 것이 쓰인 '이후'의 코드에서 PI라는 문자를 보면 3.14로 치환한다. 대문자로 선언해서 변수는 소문자로 사용되는 것과 구별. */
#define NAME "Gil-Dong"
// 문자열로 치환하는 예
#define PRINT printf("%d",1)
// 코드에서 PRINT 라는 문자를 보면 printf("%d",1) 로 치환한다. 이렇게 명령문을 이용하는 경우 세미콜론에 주의.
// 세미콜론은 자동으로 붙지 않는다. 말 그대로 치환이다.
// 코드에서 PRINT 라는 문자를 보면 printf("%d",1) 로 치환한다. 이렇게 명령문을 이용하는 경우 세미콜론에 주의.
// 세미콜론은 자동으로 붙지 않는다. 말 그대로 치환이다.
#define SUN(x,y) ((x)*2+(y)*3)
// SUN(2+2,3+9)을 보면 ((x)*2+(y)*3)로 치환하되, x대신 2+2, y대신 3+9를 대입해놓는다.
// ()를 자주 쓰는 이유는 연산 우선순위를 확실히 정하기 위해서이다. 인자로써 수식이 들어가는 경우도 있기 때문이다.
// SUN(2+2,3+9)을 보면 ((x)*2+(y)*3)로 치환하되, x대신 2+2, y대신 3+9를 대입해놓는다.
// ()를 자주 쓰는 이유는 연산 우선순위를 확실히 정하기 위해서이다. 인자로써 수식이 들어가는 경우도 있기 때문이다.
#include "user1.h"
//경로가 주어지지 않은 파일이름을 쓴 경우는 현재 작업중인 디렉토리, 그 다음 시스템에 지정된 디렉토리를 찾는다.
//경로를 쓸 수도 있다는 점을 참고, 경로포멧은 OS가 사용하는 것의 포멧으로 추측. C:\user1.h 와 /home/user1/user1.h ..
//경로가 주어지지 않은 파일이름을 쓴 경우는 현재 작업중인 디렉토리, 그 다음 시스템에 지정된 디렉토리를 찾는다.
//경로를 쓸 수도 있다는 점을 참고, 경로포멧은 OS가 사용하는 것의 포멧으로 추측. C:\user1.h 와 /home/user1/user1.h ..
#define PI 3
#undef PI
// 정의된 기호 PI를 이 다음(#undef PI 쓰인)부터 정의를 해제한다.
#undef PI
// 정의된 기호 PI를 이 다음(#undef PI 쓰인)부터 정의를 해제한다.
#define PI 3.1
#define E 2.7
#ifdef PI
count=5; /*컴파일 됨*/
#ifndef E
count=3; /*컴파일 안됨*/
#else
count=5;/*컴파일 됨*/
#endif
#define E 2.7
#ifdef PI
count=5; /*컴파일 됨*/
#else
count=3; /*컴파일 안됨*/
#endif
count=3; /*컴파일 안됨*/
#endif
#ifndef E
count=3; /*컴파일 안됨*/
#else
count=5;/*컴파일 됨*/
#endif
#define COUNT 5
#if COUNT>5 /*변수가 들어가지 않은 정수식. 물론 정의된 매크로는 사용가능하다.*/
a++;
#elif COUNT==3 /* else if 라고 생각하면 된다.*/
a=3*2
#else
a--; /*이 경우만 컴파일됨*/
#endif /*#if 와 쌍을 이룰 뿐 아니라 #ifdef와 쌍을 이룬다는 것에 다시한번 주목*/
#if COUNT>5 /*변수가 들어가지 않은 정수식. 물론 정의된 매크로는 사용가능하다.*/
a++;
#elif COUNT==3 /* else if 라고 생각하면 된다.*/
a=3*2
#else
a--; /*이 경우만 컴파일됨*/
#endif /*#if 와 쌍을 이룰 뿐 아니라 #ifdef와 쌍을 이룬다는 것에 다시한번 주목*/
'Application-level프로그래밍' 카테고리의 다른 글
(C)circular dependency,error: forward declaration (0) | 2009.09.08 |
---|---|
(C++)디버깅을 위해 파일에 정보를 기록해주는 소스 (0) | 2009.07.27 |
(C)정적 2차원 배열 전달 (0) | 2009.07.22 |
(C++)template 사용주의점 (naver 지식IN) (0) | 2009.07.08 |
(C) 함수포인터 캐스팅 (0) | 2009.05.31 |