C++ 키워드란 무엇인가?
키워드(keyword)는 컴파일러가 그 의미를 이미 정의해 놓은 특수한 단어를 말합니다. 따라서 이러한 키워드는 프로그래머가 변수명이나 함수명 등의 식별자(identifier)로 사용할 수 없습니다. 키워드는 예약어(reserved word)와 사전 정의 식별자(predefined identifier)의 집합으로 구성됩니다.
여기서 사전 정의 식별자란 컴파일러에 의해 의미가 정의되어 있지만, 사용자가 그 의미를 변경할 수 있는 식별자를 의미합니다. 반면 예약어는 절대 다른 용도로 사용할 수 없습니다.
예약어와 사전 정의 식별자의 차이
간단한 예를 들어 보겠습니다. 여러분은 main 함수 내부에 main이라는 이름의 변수를 선언하고, 값을 초기화한 뒤 출력하는 것이 가능합니다(물론 이것이 실제로 가능하다는 것을 확인하기 위한 목적으로만 사용하세요!). 하지만 else라는 이름으로 변수를 선언하는 것은 불가능합니다.
그 차이는 바로 else는 예약어인 반면, main은 단지 사전 정의 식별자일 뿐이라는 점입니다.
C++ 예약어의 구성
C++에는 총 95개의 예약어가 있으며, 이들은 편의상 몇 가지 그룹으로 나눌 수 있습니다.
- C 언어에서 계승된 예약어 (32개): C 프로그래밍 언어에 이미 존재하던 예약어로, C++로 넘어온 것들입니다.
- C++에서 새로 추가된 예약어 (30개): C에는 없었으며, C++ 프로그래밍 언어에 새롭게 도입된 예약어들입니다.
- 연산자 대체 표기용 예약어 (11개): 표준 ASCII 문자 집합을 사용하는 환경에서는 필수적이지 않지만, 일부 C++ 연산자에 대한 읽기 쉬운 대안을 제공하고, C++에 필요한 문자가 없는 문자 집합으로도 프로그래밍할 수 있도록 추가된 예약어들입니다(예:
and,or,xor등).
C++ 전체 예약어 목록
아래 표는 C++의 모든 예약어를 정리한 것입니다. 괄호 안의 표기는 해당 예약어가 도입된 시점 또는 기술 사양(TS)을 나타냅니다.
| alignas (C++11부터) | double | reinterpret_cast |
| alignof (C++11부터) | dynamic_cast | requires (C++20부터) |
| and | else | return |
| and_eq | enum | short |
| asm | explicit | signed |
| atomic_cancel (TM TS) | export(1) | sizeof(1) |
| atomic_commit (TM TS) | extern(1) | static |
| atomic_noexcept (TM TS) | false | static_assert (C++11부터) |
| auto(1) | float | static_cast |
| bitand | for | struct(1) |
| bitor | friend | switch |
| bool | goto | synchronized (TM TS) |
| break | if | template |
| case | import (모듈 TS) | this |
| catch | inline(1) | thread_local (C++11부터) |
| char | int | throw |
| char16_t (C++11부터) | long | true |
| char32_t (C++11부터) | module (모듈 TS) | try |
| class(1) | mutable(1) | typedef |
| compl | namespace | typeid |
| concept (C++20부터) | new | typename |
| const | noexcept (C++11부터) | union |
| constexpr (C++11부터) | not | unsigned |
| const_cast | not_eq | using(1) |
| continue | nullptr (C++11부터) | virtual |
| co_await (코루틴 TS) | operator | void |
| co_return (코루틴 TS) | or | volatile |
| co_yield (코루틴 TS) | or_eq | wchar_t |
| decltype (C++11부터) | private | while |
| default(1) | protected | xor |
| delete(1) | public | xor_eq |
| do | register(2) |
참고 사항
(1)로 표시된 예약어는 특정 문맥에서만 특별한 의미를 갖거나, 표준화 과정에서 지원이 변경된 키워드입니다. (2)로 표시된 register는 C++17부터 더 이상 사용되지 않는(deprecated) 키워드입니다. 또한 atomic_cancel, atomic_commit, synchronized 등은 트랜잭셔널 메모리(TM) 기술 사양에 속하며, co_await, co_return, co_yield는 코루틴 기술 사양에서 도입되어 이후 C++20 표준에 포함되었습니다.