Namespaces
Variants

Filename and line information

From cppreference.net

전처리기에서 현재 줄 번호와 파일 이름을 변경합니다.

목차

구문

#line lineno (1)
#line lineno " filename " (2)

설명

1) 현재 전처리기 라인 번호를 lineno 로 변경합니다. 이 지점 이후의 __LINE__ 매크로 발생은 lineno 에 지금까지 만난 실제 소스 코드 라인 수를 더한 값으로 확장됩니다.
2) 또한 현재 전처리기 파일 이름을 filename 으로 변경합니다. 이 지점 이후의 __FILE__ 매크로 발생은 filename 을 생성합니다.

어떤 전처리 토큰(매크로 상수 또는 표현식)이라도 유효한 10진 정수와 그 뒤에 올 수 있는 유효한 문자열로 확장되는 한, #line 인수로 허용됩니다.

lineno 는 적어도 하나 이상의 십진수 숫자로 이루어진 시퀀스여야 합니다(그렇지 않으면 프로그램의 형식이 잘못됨). 항상 십진수로 해석되며(심지어 0 으로 시작하는 경우에도).

만약 lineno 0 이거나 32767 (C99 이전) 2147483647 (C99 이후) 보다 큰 경우, 동작은 정의되지 않습니다.

참고 사항

이 지시문은 다른 언어로 작성된 파일에서 C 소스 파일을 생성하는 일부 자동 코드 생성 도구에서 사용됩니다. 이 경우, #line 지시문이 생성된 C 파일에 삽입되어 원본(사람이 편집 가능한) 소스 파일의 줄 번호와 파일 이름을 참조할 수 있습니다.

지시문 다음에 오는 줄 번호 #line __LINE__ 는 지정되지 않습니다 (이 경우 __LINE__ 가 확장될 수 있는 두 가지 가능한 값이 있습니다: 지금까지 확인된 줄바꿈 수, 또는 지금까지 확인된 줄바꿈 수에 #line 지시문을 종료하는 줄바꿈을 더한 값). 이는 소급 적용되는 DR 464 의 결과입니다.

예제

#include <assert.h>
#define FNAME "test.c"
int main(void)
{
#line 777 FNAME
        assert(2+2 == 5);
}

가능한 출력:

test: test.c:777: int main(): Assertion `2+2 == 5' failed.

참고문헌

  • C17 표준 (ISO/IEC 9899:2018):
  • 6.10.4 Line control (p: 126)
  • J.1 Unspecified behavior
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.10.4 행 제어 (p: 173)
  • C99 표준 (ISO/IEC 9899:1999):
  • 6.10.4 행 제어 (p: 158)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 3.8.4 행 제어

참고 항목

C++ 문서 에 대한 파일명 및 줄 정보