이 글은 Visual Studio에서 프로젝트 작성시 #pragma once 가 붙는 이유의 궁금증에서 시작된 http://second815.tistory.com/entry/pragma-once-why-it-is-always-attached-when-we-making-new-class-file-in-visual-studio 글에서 시작된 관련 포스트이다.
Reference: 원문
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=66305804&qb=I2lmbmRlZg==&enc=utf8§ion=kin&rank=2&sort=0&spq=0&pid=fIH9fg331xCssaC5UHVssv--070546&sid=S652MnMdrksAAD-ZjGM
Abstract:
Ex Code :
자 하나씩 설명에 들어간다. 먼저 #define
#define WORD 1 = 이것은 WORD를 1로 치환
너무나 잘 알고있는 매크로 ..
그리고 궁극적으로 알고자 했던 명령어
#ifdef WORD
printf("Hello, ");
#endif
여기서 #ifdef WORD 라는것은
'WORD란 단어가 define가 되어있다면'
즉 WORD란 단어가 위에서 #define WORD 으로 define되어 있으므로 참이 되고
그 다음줄 printf("Hello, ");가 실행
endif는 '{' 가 쓰이면 '}' 로 항상 닫아주는 녀석과 같은 역할을 한다!
#endif
#ifdef 구문이 끝났음을 알림.
이 문은 #ifdef 나 #ifndef를 선언했을때 필수적으로 짝을 맞춰야 한다.
즉 #ifdef 를 한번 선언했다면 #endif 한번, #ifdef를 두번 선언했다면 #endif를 두번 선언해야
한다.
#ifndef .. 이걸 이용함으로써 컴파일러가 헤더파일을 두번 컴파일 하지 않게 한다!
#ifndef WORD2 도 비슷.
이것은 #ifdef와는 반대로
'WORD2란 단어가 define되어 있지 않다면'
이란 뜻.
즉 WORD2란 단어는 위에서 #define에 의해 define된 적이 없으므로 참이되고
그 다음줄 printf("world/n");이 실행.
#ifndef WORD
printf("HaHa\n");
에서는 #ifndef WORD에서 WORD는 이미 define되어 있으므로 거짓이 되서
그 다름줄인 printf("HaHa\n"); 가 실행되지 않는다
즉 출력결과는 Hello world 가 된다!
'Programming > C++' 카테고리의 다른 글
C++을 하면서 자주 쓰는 구문들.. (0) | 2010.11.29 |
---|---|
seekg(0, ios::beg) doesn't work! (0) | 2010.11.28 |
Header에서 #pragma once Vs #ifndef (0) | 2010.03.28 |
#pragma once (why it is always attached when we making new class file in visual studio? (0) | 2010.03.28 |
union(공용체)와 BitField (0) | 2010.03.14 |