본문 바로가기
Theory/C&C++

[C/C++]상수의 정의와 사용법: #define, const, constexpr, enum

by wintercamo3482 2024. 11. 13.

1. 상수(const)

  • 프로그램 실행 중 값이 고정되어 변경되지 않는 변수
  • #define, const, constexpr 등의 키워드로 정의

2매크로 상수(#define)

#include <stdio.h>
#define TAX_RATE 0.2

int main(void)
{
    ...
}


전처리기(#define)를 사용하여 정수, 실수, 문자열 등 다양한 형태의 상수를 정의할 수 있다.

 

#include <stdio.h>와 같은 전처리기 단계에서 정의되기 때문에 실행 중 변경이 불가능하고, 형(type) 검사가 불가능하기 때문에 디버깅할 때 문제가 발생할 수 있다.

3.  상수 변수(const)

#include <stdio.h>

int main(void)
{
    const int MONTHS = 12;
}

형(type)을 명확하게 설정하여 디버깅 및 오류 방지가 용이하다.

 

매크로 상수(전처리기)와 차이점이라면, 상수 변수는 메모리에 상수를 저장, 컴파일러에서 처리, 타입을 지정하는 것이 필수다.

 

4. 컴파일 타입 상수(constexpr)

#include <iostream>

constexpr double PI = 3.14159;

int main(void)
{
	constexpr int MAX = 100;
    
    return 0;
}


C++ 11이상부터 지원되는 기능(C언어에선 사용 불가)으로, 컴파일러가 값을 미리 계산하여 코드에 직접 삽입하기 때문에 실행 파일에선 계산이 필요없다.

 

즉, 런타임 계산을 줄이기 때문에 성능이 향상된다.

5. 열거형 상수(enum)

enum Colors
{
	GREEN,
	RED,
	YELLOW,
	BLUE
}


그룹화된 상수를 정의할 때 유용하지만 정수형 상수로만 사용하다는 단점이 존재한다.

 

이를 극복하기 위한 것이 enum class인데, 이는 C++ 11이상부터만 사용 가능하다.