#line 지시문(C/C++)
#line 지시문은 전처리기에게 줄 번호 및 파일 이름에 대한 컴파일러의 보고된 값을 지정된 줄 번호 및 파일 이름으로 설정하도록 지시합니다.
구문
#line
digit-sequence ["filename"]
설명
컴파일러는 줄 번호와 선택적 파일 이름을 사용하여 컴파일 중에 찾은 오류를 참조합니다. 줄 번호는 일반적으로 현재 입력 줄을 나타내고 파일 이름은 현재 입력 파일을 나타냅니다. 줄 번호는 각 줄이 처리된 후 증가합니다.
숫자 시퀀스 값은 0에서 2147483647 범위 내의 정수 상수일 수 있습니다. 전처리 토큰에서 매크로 대체를 사용할 수 있지만 결과는 올바른 구문으로 평가되어야 합니다. 파일 이름은 문자의 조합일 수 있으며 큰따옴표(" "
)로 묶어야 합니다. 파일 이름을 생략하면 이전 파일 이름은 변경되지 않은 상태로 유지됩니다.
지시문을 작성 #line
하여 소스 줄 번호와 파일 이름을 변경할 수 있습니다. 지시문은 #line
소스 파일의 지시문 바로 뒤에 있는 줄의 값을 설정합니다. 번역기에서는 줄 번호와 파일 이름을 사용하여 미리 정의된 매크로 __FILE__
의 __LINE__
값을 확인하고 . 이러한 매크로를 사용하여 자체 설명 오류 메시지를 프로그램 텍스트에 삽입할 수 있습니다. 이러한 미리 정의된 매크로에 대한 자세한 내용은 미리 정의된 매크로를 참조 하세요.
매크로는 __FILE__
내용이 큰따옴표(" "
)로 둘러싸인 파일 이름인 문자열로 확장됩니다.
줄 번호와 파일 이름을 변경하면 컴파일러는 이전 값을 무시하고 새 값으로 계속 처리합니다. #line 지시문은 일반적으로 프로그램 생성기에서 사용됩니다. 생성된 프로그램 대신 오류 메시지가 원래 원본 파일을 참조하도록 하는 데 사용됩니다.
예시
다음 예제에서는 예제 #line
와 매크로를 __LINE__
__FILE__
보여 줍니다.
첫 번째 예제에서는 줄 번호가 10으로 설정된 다음 20으로 설정되고 파일 이름이 hello.cpp 변경됩니다.
// line_directive.cpp
// Compile by using: cl /W4 /EHsc line_directive.cpp
#include <stdio.h>
int main()
{
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 10
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 20 "hello.cpp"
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
}
This code is on line 7, in file line_directive.cpp
This code is on line 10, in file line_directive.cpp
This code is on line 20, in file hello.cpp
This code is on line 21, in file hello.cpp
이 예제에서 매크로 ASSERT
는 미리 정의된 매크로를 __LINE__
__FILE__
사용하고 지정된 어설션이 true가 아닌 경우 원본 파일에 대한 오류 메시지를 출력합니다.
#define ASSERT(cond) if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}