language/C
#ifdef와 defined() 차이점
꼬져스
2009. 5. 5. 23:14
반응형
#ifdef 는 정의되있는지를 테스트 하므로, 한번에 여러개를
사용할 수는 없다. 형식이 #ifdef name 처럼,
하나의 토큰이 되어야한다.
여러개가 정의되있는지 테스트 하기위해서는
#if defined(MACRO1) || defined(MACRO2)처럼 사용.
단, #if는 ||로 중첩해서 사용할 수 있다.
형식이, #if expression이므로, C표현이 올수 있다.
#if MACRO1 || MACRO2 처럼 사용해도 된다.
#if !defined() 의 의미는 #ifndef 와 같다. (if not define)
()안의 내용이 정의되어 있지 않으면 그 아래부분 (#endif까지)을 유효한 소스코드로 인식하고 컴파일 시 적용하라는 의미다.
그런데 그 괄호안의 부분을 찾을 수가 없다는 것은
EXCLUDE_PGX_SUPPORT 가 아무데도 define되지 않았음을 의미
정의되어 있지 않으므로 해당 구문 이후의 소스코드는
유효한 코드가 된다.
#if !defined(...)
안의 내용은 유효코드
#endif
반대로, #ifdef (...)라면
해당 키워드가 정의되어 있지 않으므로
#endif 까지의 코드내용은 전부 무의미해진다.