Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 예약어(Reserved Words) 총정리 – 95개 키워드 완벽 가이드

예약어(Reserved Word)란 무엇인가?

예약어(reserved word)는 변수명, 함수명, 레이블처럼 식별자(identifier)로 사용할 수 없는 단어를 말합니다. 즉, 언어 차원에서 '사용이 예약되어 있는' 단어입니다. 이는 구문론적(syntactic) 정의이며, 일부 예약어는 실제로 특별한 의미를 갖지 않는 경우도 있습니다.

C++에서는 다음과 같이 작성하면 컴파일 오류가 발생합니다.

int while = 10;   // 오류! 'while'은 예약어이므로 변수 이름으로 사용 불가

C++ 예약어의 개수와 분류

C++에는 총 95개의 예약어가 있으며, 편의상 몇 가지 그룹으로 나누어 살펴볼 수 있습니다.

1. C 언어에서 계승된 예약어 (32개)

첫 번째 그룹은 C 프로그래밍 언어에 이미 존재하던 예약어들로, 그대로 C++로 계승된 32개입니다. int, char, if, else, for, while, struct, switch 등이 여기에 속합니다.

2. C++에서 새로 도입된 예약어 (30개)

두 번째 그룹은 C에는 없었고 C++에서 새롭게 추가된 30개입니다. class, public, private, protected, new, delete, template, namespace, try, catch, throw 등 객체지향 프로그래밍과 예외 처리를 지원하기 위한 키워드가 대표적입니다.

3. 연산자 대체 표기용 예약어 (11개)

세 번째 그룹은 표준 ASCII 문자 집합을 사용하는 환경에서는 꼭 필요하지 않지만, 일부 C++ 연산자에 대해 더 읽기 쉬운 대안을 제공하고, C++에 필요한 기호가 없는 문자 집합으로도 프로그래밍할 수 있도록 추가된 11개입니다. and(&&), or(||), not(!), bitand(&), bitor(|), xor(^), compl(~) 등이 해당됩니다.

C++ 전체 예약어 목록

아래는 C++의 모든 예약어를 정리한 표입니다. 괄호 안의 표기는 해당 키워드가 도입된 시점이나 기술 사양(TS)을 나타냅니다.

alignas (C++11~)alignof (C++11~)and
and_eqasmatomic_cancel (TM TS)
atomic_commit (TM TS)atomic_noexcept (TM TS)auto
bitandbitorbool
breakcasecatch
charchar16_t (C++11~)char32_t (C++11~)
classcomplconcept (C++20~)
constconstexpr (C++11~)const_cast
continueco_await (코루틴 TS)co_return (코루틴 TS)
co_yield (코루틴 TS)decltype (C++11~)default
deletedodouble
dynamic_castelseenum
explicitexportextern
falsefloatfor
friendgotoif
import (모듈 TS)inlineint
longmodule (모듈 TS)mutable
namespacenewnoexcept (C++11~)
notnot_eqnullptr (C++11~)
operatororor_eq
privateprotectedpublic
registerreinterpret_castrequires (C++20~)
returnshortsigned
sizeofstaticstatic_assert (C++11~)
static_caststructswitch
synchronized (TM TS)templatethis
thread_local (C++11~)throwtrue
trytypedeftypeid
typenameunionunsigned
usingvirtualvoid
volatilewchar_twhile
xorxor_eq

예약어 사용 시 주의사항

  • 예약어는 대소문자를 구분하며, 반드시 소문자로 사용해야 합니다. While이나 INT는 예약어가 아니므로 식별자로 사용할 수 있습니다(다만 혼동을 피하기 위해 권장하지 않습니다).
  • finaloverride는 예약어가 아니라 문맥에 따라 특별한 의미를 갖는 맥락 의존 키워드(contextual keyword)이므로, 일반적인 상황에서는 식별자로 사용할 수 있습니다.
  • 일부 컴파일러는 자체 확장 키워드를 추가로 예약하므로, 이식성이 중요한 코드에서는 컴파일러 문서를 확인하는 것이 좋습니다.