{{위키데이터 속성 추적}}
[[프로그래밍 언어]]에서 '''레이블'''({{lang|en|label}})은 [[소스 코드]] 안의 위치를 식별하는 일련의 문자열이다. 대부분의 언어에서 레이블은 [[식별자]]의 형태를 취하며, 그 다음에 [[구두점]]이 온다. (예: [[콜론]]) 수많은 [[고급 프로그래밍 언어]]에서 레이블의 목적은 <code>[[Goto 문|GOTO]]</code> 문의 도착지로서 활동하기 위해 존재한다.<ref>{{웹 인용 |url=http://c0x.coding-guidelines.com/6.8.6.1.html |제목=C Standard section 6.8.6.1 The goto statement |확인날짜=2019-02-07 |archive-date=2007-12-24 |archive-url=https://web.archive.org/web/20071224215314/http://c0x.coding-guidelines.com/6.8.6.1.html |url-status=dead }}</ref><ref>{{웹 인용|url=http://www.qbasicnews.com/qboho/qckgoto.shtml|title=GOTO Statement QuickSCREEN|date=1988|accessdate=2008-07-03|publisher=Microsoft|보존url=https://web.archive.org/web/20090725050926/http://www.qbasicnews.com/qboho/qckgoto.shtml|보존날짜=2009-07-25|url-status=dead}}</ref> [[어셈블리어]]에서 레이블은 주소 연산이 가능한 모든 위치에 사용할 수 있다. (예: [[JMP (x86 명령어)|JMP]]</code> 또는 <code>[[MOV (x86 명령어)|MOV]]</code> 명령어)<ref>{{웹 인용|url=http://www.cs.uaf.edu/2007/fall/cs301/support/x86/index.html|title=nasm x86 Assembly|date=|accessdate=2008-07-03|author=O. Lawlor}}</ref> 이는 [[파스칼 (프로그래밍 언어)|파스칼]] 및 파생 언어에서도 마찬가지이다. [[포트란]], [[베이직]] 등의 일부 언어들은 숫자 레이블을 지원한다.<ref name="GBvsQB">{{웹 인용|url=http://support.microsoft.com/kb/73084|title=Differences Between GW-BASIC and QBasic|확인날짜=2019-02-07|archive-date=2010-02-10|archive-url=https://web.archive.org/web/20100210111932/http://support.microsoft.com/kb/73084|url-status=}}</ref> 또, 레이블은 [[컴파일러|컴파일된]] 일련의 문들로 향하는 진입점(엔트리 포인트)을 식별하기 위해서도 사용된다. (예: [[디버그]] 중에)

== C ==
[[C (프로그래밍 언어)|C]]에서 레이블은 코드 안의 문을 식별한다. 하나의 문은 여러 레이블이 있을 수 있다. 레이블은 코드의 위치를 가리키며 레이블에 도달한다고 하여 실제 실행에 영향을 미치지 않는다.

=== 함수 레이블 ===
{{참고|goto}}

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

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

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

=== 스위치 레이블 ===
{{참고|스위치 문}}

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

<syntaxhighlight lang="c">
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;
}
</syntaxhighlight>

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

== 예시 ==

=== 자바스크립트 ===
<syntaxhighlight lang="javascript">
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
</syntaxhighlight>

== 같이 보기 ==
* [[Goto 문]]
* [[줄 번호]]
* [[Switch 문]]

== 각주 ==
{{각주}}

[[분류:소스 코드]]
[[분류:제어 흐름]]
[[분류:프로그래밍 언어 개념]]