본문 바로가기
개발/C, C++

[c/c++] 전처리지시자

by 77monkey 개발자 2023. 8. 10.
반응형

전처리지시자는 컴파일 전에 #으로 시작하는 지시자들에 대해서 처리하는 것을 말한다. 
내가 주로 쓰는 것들을 아래와 같다. 

#include <stdio.h>

#if 1
#else 
#endif

#define haha
#ifdef haha 
#endif

#include를 하게 되면 해당하는 header 파일을 가져오게 된다. 
header를 아예 복사를 해오는 것이다. 
그런데 project가 복잡해지거나 하면 header 파일을 여기저기에서 include를 하게 되는데, 그러면 header가 중복되서  컴파일 에러가 날 수 있다!!! (그렇게 사용을 안 해봐서 사실 검색해봤다 ㅎㅎ)
그래서 아래와 같이 header 파일 전/후에 사용한다. 
#ifndef은 다음에 나오는 단어(_TEST_H_)가 선언되어 있지 않으면 아래 내용을 실행한다라는 의미를 가지고 있다. 
그러면 #define를 마주하게 되는데 이것을 통해서 단어(_TEST_H_)가 정의가 되게 된다.
그리고 코드 내용을 실행하고(보통은 함수 선언이나 구조체나 변수 등이 선언된다.) 끝나게 된다. 
자 그럼 한 번 더 test.h가 include가 되었다고 하자.
그러면 어떻게 될까? 
#ifndef을 만났는데, _TEST_H_가 이미 전 include에 의해서 define이 되었다. 
그럼 바로 #endif로 가고 코드를 안 타게 된다. 
그러면 해당 header는 한번만 include 되게 된다. 짜잔★

#ifndef _TEST_H_
#define _TEST_H_

// 코드

#endif /* _TEST_H_ */

와! #include로 이렇게 이야기하다가 글을 끝낼 뻔 했다.
다시 원래 곳으로 돌아가면,,
 
#if #else #endif는 기존에 사용하던 if else 와 비슷하다.
#if 1 은 #if 다음에 참이라면, 즉 0이 아니라면 아래 코드를 실행해주라는 의미이다. 어디까지? #endif 까지 말이다. 
물론 #else가 있다면 #else까지를 의미한다.
#if 다음에 거짓이 오게 된다면 #else에서 시작하여 #endif까지 코드를 실행하게 된다. 
#ifdef 는 위에서 살짝 보고 온 #ifndef과 느낌이 비슷하다. 
#ifdef 다음에 오는 것이 define이 되어 있다면 아래 코드를 실행한다. 
#ifdef 말고도, #if defined( )을 쓰기도 한다.  <-- 혹시 이 2개의 차이를 아시면 알려주시길... 
 

반응형

'개발 > C, C++' 카테고리의 다른 글

[c/c++] for문 (2)  (1) 2023.08.16
[c/c++] for문  (0) 2023.08.16
[c/c++] if 문  (0) 2023.08.14
[c/c++] 제어문 조건  (0) 2023.08.14
[c/c++] main 함수  (0) 2023.08.14