0Pricing
C Academy · 강의

#define 상수

전처리기 상수를 사용해 보세요.

#define 상수은(는) CoddyKit의 무료 C Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

#define의 기능

#define은 전처리기 지시문으로, 컴파일 전에 전처리기가 텍스트로 바꾸는 이름인 매크로를 만듭니다.

버퍼 크기나 제한값처럼 고정된 값에 읽기 쉬운 이름을 붙이는 데 흔히 사용합니다.

#define MAX_LEN 256

텍스트 치환

매크로는 순수한 텍스트 치환입니다. MAX_LEN이 나타나는 곳마다 전처리기는 그 자리에 256을 씁니다.

자료형도 메모리도 없으며, 컴파일러가 코드를 보기 전 단계에서 처리됩니다.

#include <stdio.h>
#define MAX_LEN 256
int main(void) {
    printf("%d\n", MAX_LEN);
    return 0;
}

세미콜론을 붙이지 않기

흔한 실수는 #define 끝에 세미콜론을 붙이는 것입니다.

세미콜론이 치환 텍스트의 일부가 되어 이해하기 어려운 오류를 일으킬 수 있으므로 붙이지 마세요.

#define PI 3.14159     /* correct */
#define BAD 10;        /* wrong: semicolon is substituted too */

실수 상수 정의하기

매크로는 부동 소수점 값을 포함한 모든 리터럴에 사용할 수 있습니다.

여기서는 사용할 때마다 PI가 넓이 수식에 치환됩니다.

#include <stdio.h>
#define PI 3.14159
int main(void) {
    double r = 2.0;
    printf("%.2f\n", PI * r * r);
    return 0;
}

배열 크기에 매크로 사용하기

배열 크기는 컴파일 시점에 값을 알아야 하므로 매크로를 사용해 지정하는 경우가 많습니다.

이름을 사용하면 크기를 한곳에서 관리하고 쉽게 변경할 수 있습니다.

#include <stdio.h>
#define SIZE 5
int main(void) {
    int data[SIZE] = {1, 2, 3, 4, 5};
    printf("%d\n", data[SIZE - 1]);
    return 0;
}

항상 수식을 괄호로 묶기

매크로가 수식으로 확장된다면 괄호로 묶으세요.

괄호가 없으면 더 큰 수식 안에서 매크로를 사용할 때 연산자 우선순위가 의미를 바꿀 수 있습니다.

#define WIDTH (4 + 2)   /* good */
#define BADW 4 + 2       /* risky: 10 * BADW becomes 10*4+2 */

괄호가 중요한 이유

이 프로그램은 그 차이를 보여 줍니다. 괄호가 있으면 WIDTH 전체에 곱셈이 적용되고, 괄호가 없으면 일부에만 곱셈이 적용됩니다.

안전한 버전은 60을 출력하지만, 안전하지 않은 확장 결과는 다르게 계산됩니다.

#include <stdio.h>
#define WIDTH (4 + 2)
int main(void) {
    printf("%d\n", 10 * WIDTH);
    return 0;
}

문자열 매크로

매크로는 문자열 리터럴을 대신할 수도 있어 고정된 메시지나 버전 이름에 편리합니다.

따옴표를 포함한 텍스트가 그대로 치환됩니다.

#include <stdio.h>
#define APP_NAME "CoddyKit"
int main(void) {
    printf("Welcome to %s\n", APP_NAME);
    return 0;
}

#define과 const 비교

매크로에는 자료형과 주소가 없지만, const 변수에는 둘 다 있으며 범위 규칙을 따릅니다.

자료형 안전성과 디버깅 시 확인 가능성이 필요하다면 const를 우선 사용하세요. 배열 크기처럼 컴파일 시점에 필요한 상수에는 #define을 사용하세요.

#define M_SIZE 10
const int c_size = 10;

매크로 해제와 보호

#undef를 사용하면 매크로를 제거할 수 있습니다. 매크로는 헤더가 중복 포함되는 것을 막는 헤더 보호에도 사용됩니다.

여기서는 헤더 파일의 맨 위에 사용하는 전형적인 보호 패턴을 보여 줍니다.

#ifndef CONFIG_H
#define CONFIG_H
/* header contents here */
#endif

관례적인 이름 지정

오랜 관례에 따라 매크로 이름은 대문자와 밑줄로 작성합니다.

이렇게 하면 전처리기 상수임을 시각적으로 드러내고 일반 변수 이름과 충돌하는 것을 피하는 데 도움이 됩니다.

#include <stdio.h>
#define BUFFER_SIZE 1024
int main(void) {
    printf("%d\n", BUFFER_SIZE);
    return 0;
}

빠른 확인

매크로를 얼마나 이해했는지 확인해 보세요.

복습

#define은 전처리기가 텍스트로 치환하는 매크로를 만듭니다. 매크로에는 자료형, 세미콜론, 메모리가 없습니다.

수식은 괄호로 묶고, 자료형이 안전한 값에는 const를 우선 사용하세요. 배열 크기와 헤더 보호처럼 컴파일 시점에 필요한 경우에는 매크로를 사용하면 됩니다.

자주 묻는 질문

“#define 상수” 강의는 무료인가요?

네 — “#define 상수” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C Academy 강의 전체를 잠금 해제할 수 있습니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“#define 상수”에서 뭘 배우나요?

전처리기 상수를 사용해 보세요. 브라우저에서 직접 실행하는 실습 코드로 C Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“#define 상수” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 열거형 정의하기
  2. 열거형 값과 범위
  3. const 변수
  4. #define 상수
← C Academy(으)로 돌아가기