새소식

인기 검색어

CS/C++

"#define" vs "static const" vs "enum"

  • -

https://stackoverflow.com/questions/1674032/static-const-vs-define-vs-enum

 

"static const" vs "#define" vs "enum"

Which one is better to use among the below statements in C? static const int var = 5; or #define var 5 or enum { var = 5 };

stackoverflow.com

몇가지 주목할 점:

  1. #define은 전처리기가 처리(즉, 그냥 문자그대로 바꿔치기) . 따라서 디버깅 할때 심볼이 따로 안잡힘. 디버깅 어려움
  2. 사용성에서 const int는 제약이 생길수도. 배열크기 초기화, switch문 인덱스값 등에 사용할 수 없을 수 있음.
  3. 대체로 enum 선호

 

C++에서 const int는 컴파일 타임에 그 값이 알려진 상수입니다. 그러나 모든 const int 값이 컴파일 타임 상수 (즉, 컴파일러가 컴파일 타임에 그 값을 알 수 있는 값)는 아닙니다.

예를 들어, 다음과 같은 코드를 고려해 보세요:

int a = 10; const int b = a;​

여기서 b는 const int입니다. 그러나 b의 값은 실행 시간에 결정되기 때문에 컴파일 타임 상수가 아닙니다. 따라서 이런 상수는 배열의 인덱스나 switch 문의 케이스 레이블로 사용할 수 없습니다.

반면에:

const int c = 10;

여기서 c는 컴파일 타임에 그 값이 알려진 상수입니다. 이런 상수는 배열의 인덱스나 switch 문의 케이스 레이블로 사용할 수 있습니다.
결론적으로, const int를 배열의 인덱스나 switch 문의 케이스 레이블로 사용하려면 그 값이 컴파일 타임에 알려져 있어야 합니다. 이를 위해 C++11에서는 constexpr 키워드를 도입하여 컴파일 타임에 평가되는 상수를 명확히 나타낼 수 있게 되었습니다. 따라서 가능한 한 constexpr를 사용하여 이러한 상황에서의 의도를 명확히 표현하는 것이 좋습니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.