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

C/C++ 변수 이름이 숫자로 시작할 수 없는 이유

C/C++에서 변수 이름은 영문 알파벳, 숫자, 밑줄(_) 문자로 구성할 수 있습니다. 언어에 내장된 키워드를 제외한 나머지 이름은 모두 식별자(identifier)로 취급되며, 식별자란 변수, 상수, 함수 등에 붙이는 이름을 의미합니다.

그런데 식별자는 반드시 숫자가 아닌 문자, 즉 알파벳이나 밑줄로 시작해야 합니다. 그 이유는 컴파일러가 소스 코드를 처리할 때 다음과 같은 일곱 단계를 거치기 때문입니다.

  • 어휘 분석(Lexical Analysis)
  • 구문 분석(Syntax Analysis)
  • 의미 분석(Semantic Analysis)
  • 중간 코드 생성(Intermediate Code Generation)
  • 코드 최적화(Code Optimization)
  • 코드 생성(Code Generation)
  • 심볼 테이블(Symbol Table)

위 어느 단계도 숫자로 시작하는 변수를 지원하지 않습니다. 변수 이름이 숫자로 시작하면 컴파일러는 뒤따르는 알파벳을 만나기 전까지 해당 토큰이 숫자 리터럴인지 식별자인지 판단할 수 없어 혼란에 빠집니다. 이 경우 컴파일러는 이미 통과한 어휘 분석 단계로 되돌아가야 하는데, 이러한 역추적(backtracking)은 지원되지 않습니다. 따라서 컴파일러는 첫 번째 문자만 보고도 해당 토큰이 식별자인지 리터럴인지 즉시 구분할 수 있어야 하며, 이것이 변수 이름이 숫자로 시작할 수 없는 근본적인 이유입니다.

컴파일 오류가 발생하는 예제

다음은 C 언어에서 변수를 선언하는 예제로, 숫자로 시작하는 변수가 어떤 문제를 일으키는지 보여줍니다.

#include <stdio.h>
int main() {
    int 5s = 8;
    int _4a = 3;
    int b = 12;
    printf("The value of variable 5s : %d", 5s);
    printf("The value of variable _4a : %d", _4a);
    printf("\nThe value of variable b : %d", b);
    return 0;
}

위 프로그램은 변수 5s가 숫자 5로 시작하기 때문에 "invalid suffix "s" on integer constant"(정수 상수에 잘못된 접미사 "s")라는 컴파일 오류를 발생시킵니다. 숫자로 시작하는 변수 선언 부분을 제거하면 프로그램이 정상적으로 동작합니다.

정상 동작하는 예제

#include <stdio.h>
int main() {
    int _4a = 3;
    int b = 12;
    printf("The value of variable _4a : %d", _4a);
    printf("\nThe value of variable b : %d", b);
    return 0;
}

실행 결과

위 프로그램의 출력 결과는 다음과 같습니다.

The value of variable _4a : 3
The value of variable b : 12