예약어(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_eq | asm | atomic_cancel (TM TS) |
| atomic_commit (TM TS) | atomic_noexcept (TM TS) | auto |
| bitand | bitor | bool |
| break | case | catch |
| char | char16_t (C++11~) | char32_t (C++11~) |
| class | compl | concept (C++20~) |
| const | constexpr (C++11~) | const_cast |
| continue | co_await (코루틴 TS) | co_return (코루틴 TS) |
| co_yield (코루틴 TS) | decltype (C++11~) | default |
| delete | do | double |
| dynamic_cast | else | enum |
| explicit | export | extern |
| false | float | for |
| friend | goto | if |
| import (모듈 TS) | inline | int |
| long | module (모듈 TS) | mutable |
| namespace | new | noexcept (C++11~) |
| not | not_eq | nullptr (C++11~) |
| operator | or | or_eq |
| private | protected | public |
| register | reinterpret_cast | requires (C++20~) |
| return | short | signed |
| sizeof | static | static_assert (C++11~) |
| static_cast | struct | switch |
| synchronized (TM TS) | template | this |
| thread_local (C++11~) | throw | true |
| try | typedef | typeid |
| typename | union | unsigned |
| using | virtual | void |
| volatile | wchar_t | while |
| xor | xor_eq |
예약어 사용 시 주의사항
- 예약어는 대소문자를 구분하며, 반드시 소문자로 사용해야 합니다.
While이나INT는 예약어가 아니므로 식별자로 사용할 수 있습니다(다만 혼동을 피하기 위해 권장하지 않습니다). final과override는 예약어가 아니라 문맥에 따라 특별한 의미를 갖는 맥락 의존 키워드(contextual keyword)이므로, 일반적인 상황에서는 식별자로 사용할 수 있습니다.- 일부 컴파일러는 자체 확장 키워드를 추가로 예약하므로, 이식성이 중요한 코드에서는 컴파일러 문서를 확인하는 것이 좋습니다.