본문 바로가기
프로그래밍 언어/C 언어

[C/C++] [전처리기] #if

by 까망 하르방 2024. 7. 23.
반응형

#if

if - else문과 비슷한 구조를 가진다.

다만 끝에 #endif 닫아주는 지시어가 존재한다.

또한 조건문에 사용되는 소괄호와 동작 내용 부분의 중괄호가 존재하지 않는다.

 

#include <stdio.h>

#define MODE 1

#if MODE == 1
char FILE_NAME[20] = "input.txt";
#elif  MODE == 2
char FILE_NAME[20] = "sample.txt";
#else
char FILE_NAME[20] = "sample_input.txt";
#endif

int main() {
    freopen(FILE_NAME, "r", stdin);
}

 

Q) if문과 같이 조건에 따른 분기처리를 하는데 굳이 #if가 존재하는 이유는?

A) 조건에 부합하지 않는 경우(false)인 경우 컴파일 자체가 되지 않기에 성능(크기, 시간)을 높일 수 있다.

    즉, #if는 조건에 따라 소스 코드를 실제 컴파일하거나 하지 않는 용도로 전처리기 사용 목적과 부합된다.

A) 예시 코드에서는 #if를 통해 읽는 파일을 변경하였는데,

    물론 if문으로도 구현가능하지만 비즈니스 로직 처리하는 부분과는 다르게 표시하는 것에도 의미가 있다.

    컴파일되지 않는 영역을 음영처리 되기 때문에 가독성도 좋다.

 

※ 이러한 전처리기 지시어에는

#if #ifdef #ifndef 등 여러가지가 존재한다.

 

 

Reference

[C] [전처리기] #ifdef

반응형

댓글