레이블 (컴퓨터 과학)

위키백과, 우리 모두의 백과사전.

프로그래밍 언어에서 레이블(label)은 소스 코드 안의 위치를 식별하는 일련의 문자열이다. 대부분의 언어에서 레이블은 식별자의 형태를 취하며, 그 다음에 구두점이 온다. (예: 콜론) 수많은 고급 프로그래밍 언어에서 레이블의 목적은 GOTO 문의 도착지로서 활동하기 위해 존재한다.[1][2] 어셈블리어에서 레이블은 주소 연산이 가능한 모든 위치에 사용할 수 있다. (예: JMP 또는 MOV 명령어)[3] 이는 파스칼 및 파생 언어에서도 마찬가지이다. 포트란, 베이직 등의 일부 언어들은 숫자 레이블을 지원한다.[4] 또, 레이블은 컴파일된 일련의 문들로 향하는 진입점(엔트리 포인트)을 식별하기 위해서도 사용된다. (예: 디버그 중에)

C[편집]

C에서 레이블은 코드 안의 문을 식별한다. 하나의 문은 여러 레이블이 있을 수 있다. 레이블은 코드의 위치를 가리키며 레이블에 도달한다고 하여 실제 실행에 영향을 미치지 않는다.

함수 레이블[편집]

함수 레이블은 식별자로 구성되며 그 뒤 콜론이 온다. 이러한 각각의 레이블은 함수의 문을 가리키며 식별자는 해당 함수에서 고유해야 한다. 다른 함수들은 레이블에 동일한 이름을 사용할 수 있다. 레이블 식별자는 자신만의 이름공간을 점유하며 같은 이름의 변수함수를 레이블로 가질 수 있다.

void foo(int number)
{
    if (number < 0)
        goto error;
    bar(number);
    return;
error:
    fprintf(stderr, "유효하지 않은 숫자입니다!\n");
}

여기서 "error"가 레이블이다. goto 문을 사용하면 코드 안의 레이블 문으로 건너뛸 수 있다. goto 이후 프로그램 실행은 레이블 뒤의 문으로 계속 이어나간다.

스위치 레이블[편집]

스위치 문에는 두 종류의 레이블을 추가할 수 있다. 케이스 레이블은 키워드 case로 이루어지며 그 다음에 정수를 평가하는 식이 따라온다. 기본 레이블은 키워드 default로 구성된다. 케이스 레이블은 정수값을 코드 안의 문과 연결하는데 사용된다. 스위치 문에 도달하면 프로그램 실행은 스위치의 괄호 안의 값과 일치하는 값의 케이스 레이블 이후의 문으로 계속 이어나간다. 기본 레이블이 없으면 프로그램 실행은 스위치 문 이후로 계속 이어나간다.

switch (die)
{
default:
    printf("invalid\n");
    break;

case 1:
case 3:
case 5:
    printf("홀수\n");
    break;

case 2:
case 4:
case 6:
    printf("짝수\n");
    break;
}

단일 switch 문 안에서 각 케이스 레이블에 연결된 정수는 고유해야 한다. 기본(default) 문이 있을 수도 없을 수도 있다. 스위치 안에서 레이블의 순서는 제약이 없다. 케이스 레이블 값이 정수에 대해 평가를 요구하는 것은 컴파일러에게 최적화를 위한 더 많은 여지를 주기 위해서이다.

예시[편집]

자바스크립트[편집]

top: //Label the outermost for-loop.
for (var i = 0; i < 4; i++) {
    for (var j = 0; j < 4; j++) {
        if (j === 3 && i === 2) {
            alert("i=" + i + ", j=" + j); //i=2, j=3
            break top;
        }
    }
}

alert("i=" + i + ", j=" + j); //i=2, j=3

같이 보기[편집]

각주[편집]

  1. C Standard section 6.8.6.1 The goto statement
  2. “GOTO Statement QuickSCREEN”. Microsoft. 1988. 2009년 7월 25일에 원본 문서에서 보존된 문서. 2008년 7월 3일에 확인함. 
  3. O. Lawlor. “nasm x86 Assembly”. 2008년 7월 3일에 확인함. 
  4. “Differences Between GW-BASIC and QBasic”.