VS Code에서 C 전처리 지시자(`#ifdef`, `#if`) 임의로 컨트롤하는 방법
VS Code에서 C 전처리 지시자(`#ifdef`, `#if`) 임의로 컨트롤하는 방법
C 개발을 하다 보면 #ifdef, #if, #define 같은 전처리 지시자를 자주 사용하게 됩니다. 특히 기능 테스트, 디버그 분기, 개발/배포 모드 전환 시 매우 유용합니다.
이번 글에서는 VS Code에서 전처리 지시자를 쉽게 제어하는 방법을 정리합니다. 🚀
1. 가장 기본: 코드 안에서 직접 #define 제어
가장 단순한 방법은 코드 내부에서 직접 매크로를 선언하는 것입니다.
1
2
3
4
5
6
7
#define FEATURE_A
#ifdef FEATURE_A
printf("A enabled\n");
#else
printf("A disabled\n");
#endif
비활성화
1
// #define FEATURE_A
이 방법은 바로 이해하기 쉽지만, 기능을 바꿀 때마다 소스를 수정해야 하므로 규모가 커질수록 불편합니다.
2. VS Code에서 c_cpp_properties.json으로 제어
VS Code에서는 .vscode/c_cpp_properties.json 파일을 이용해 IntelliSense 기준 매크로를 지정할 수 있습니다.
폴더 구조
1
2
3
4
project/
├─ main.c
└─ .vscode/
└─ c_cpp_properties.json
설정 파일 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"FEATURE_A",
"DEBUG"
],
"compilerPath": "C:/mingw64/bin/gcc.exe",
"cStandard": "c17",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
동작 확인
1
2
3
4
5
#ifdef FEATURE_A
printf("A ON");
#else
printf("A OFF");
#endif
defines에서 "FEATURE_A"를 제거하면 VS Code에서 해당 영역이 회색으로 비활성 표시됩니다.
즉:
- IntelliSense 즉시 반영
- inactive code 시각화 가능
3. inactive code 회색 표시 활성화
VS Code 설정에서 아래 옵션을 켜면 비활성 코드가 더 잘 보입니다.
1
"C_Cpp.dimInactiveRegions": true
4. 실제 컴파일 시 매크로 전달 (gcc -D)
c_cpp_properties.json은 편집기 표시용입니다. 실제 컴파일에는 -D 옵션을 사용해야 합니다.
컴파일 예시
1
gcc main.c -DFEATURE_A -o main.exe
코드
1
2
3
#ifdef FEATURE_A
printf("enabled\n");
#endif
값 전달도 가능
1
gcc main.c -DVERSION=2
1
2
3
#if VERSION == 2
printf("version2\n");
#endif
5. 가장 추천: config.h로 즉시 토글
실무에서는 별도 설정 파일을 두는 방식이 가장 많이 사용됩니다.
config.h
1
2
3
#define FEATURE_A 1
#define FEATURE_B 0
#define DEBUG_MODE 1
main.c
1
2
3
4
5
6
7
8
9
#include "config.h"
#if FEATURE_A
printf("A ON\n");
#endif
#if DEBUG_MODE
printf("debug log\n");
#endif
토글
1
#define FEATURE_A 0
숫자만 바꾸면 바로 전환됩니다.
6. #if 0 임시 비활성화
특정 코드 블록을 잠시 막고 싶을 때 가장 빠른 방법입니다.
1
2
3
#if 0
printf("임시 중지");
#endif
다시 활성화
1
2
3
#if 1
printf("다시 활성화");
#endif
7. 추천 프로젝트 구조
1
2
3
4
5
project/
├─ main.c
├─ config.h
└─ .vscode/
└─ c_cpp_properties.json
이 구조를 쓰면:
- IntelliSense 제어
- 빌드 분기
- 기능 토글
모두 깔끔하게 관리됩니다.
정리
추천 우선순위:
config.h로 기능 토글c_cpp_properties.json으로 IntelliSense 제어gcc -D로 빌드 분기
This post is licensed under CC BY 4.0 by the author.