include_alias
pragma
지시문에서 #include
alias_filename 발견되면 컴파일러가 해당 위치에 actual_filename 대체합니다.
구문
#pragma include_alias(
"alias_filename",
"actual_filename")
#pragma include_alias(
<<>,
alias_filename actual_filename>)
설명
지시 include_alias
pragma 문을 사용하면 원본 파일에 포함된 파일 이름에 대해 이름이 다르거나 경로가 다른 파일을 대체할 수 있습니다. 예를 들어 일부 파일 시스템은 8.3 FAT 파일 시스템 제한보다 더 긴 헤더 파일 이름을 허용합니다. 긴 헤더 파일 이름의 처음 8자만 고유하지 않을 수 있으므로 컴파일러는 더 긴 이름을 8.3으로 잘라낼 수 없습니다. 컴파일러가 지시문에서 alias_filename 문자열을 #include
볼 때마다 대신 이름 actual_filename 대체합니다. 그런 다음 actual_filename 헤더 파일을 로드합니다. 해당 pragma #include
지시문 앞에 나타나야 합니다. 예시:
// First eight characters of these two files not unique.
#pragma include_alias( "AppleSystemHeaderQuickdraw.h", "quickdra.h" )
#pragma include_alias( "AppleSystemHeaderFruit.h", "fruit.h" )
#pragma include_alias( "GraphicsMenu.h", "gramenu.h" )
#include "AppleSystemHeaderQuickdraw.h"
#include "AppleSystemHeaderFruit.h"
#include "GraphicsMenu.h"
검색할 별칭은 사양과 정확히 일치해야 합니다. 대/소문자, 맞춤법 및 큰따옴표 또는 꺾쇠 괄호 사용은 모두 일치해야 합니다. 파일 include_alias
pragma 이름에 대한 간단한 문자열 일치를 수행합니다. 다른 파일 이름 유효성 검사는 수행되지 않습니다. 예를 들어 다음과 같은 지시문에서는
#pragma include_alias("mymath.h", "math.h")
#include "./mymath.h"
#include "sys/mymath.h"
헤더 파일 문자열이 정확히 일치하지 않으므로 별칭 대체가 수행되지 않습니다. 또한 컴파일러 옵션 또는 /Yc
hdrstop
pragma컴파일러 옵션의 /Yu
인수로 사용되는 헤더 파일 이름은 대체되지 않습니다. 예를 들어 소스 파일에 다음 지시문이 포함된 경우,
#include <AppleSystemHeaderStop.h>
해당 컴파일러 옵션은 다음과 같이 됩니다.
/YcAppleSystemHeaderStop.h
헤더 파일 이름을 다른 이름으로 매핑하는 데 사용할 include_alias
pragma 수 있습니다. 예시:
#pragma include_alias( "api.h", "c:\version1.0\api.h" )
#pragma include_alias( <stdio.h>, <newstdio.h> )
#include "api.h"
#include <stdio.h>
큰따옴표로 묶인 파일 이름과 꺾쇠 괄호로 묶인 파일 이름을 혼합하지 마세요. 예를 들어 위의 두 #pragma include_alias
지시문을 고려할 때 컴파일러는 다음 #include
지시문에 대한 대체를 수행하지 않습니다.
#include <api.h>
#include "stdio.h"
또한 다음 지시문은 오류를 생성합니다.
#pragma include_alias(<header.h>, "header.h") // Error
오류 메시지 또는 미리 정의된 __FILE__
매크로의 값으로 보고된 파일 이름은 대체가 완료된 후의 파일 이름입니다. 예를 들어 다음 지시문 뒤의 출력을 참조하세요.
#pragma include_alias( "VERYLONGFILENAME.H", "myfile.h" )
#include "VERYLONGFILENAME.H"
오류가 VERYLONGFILENAME.H
발생하면 다음과 같은 오류 메시지가 표시됩니다.
myfile.h(15) : error C2059 : syntax error
또한 전이성은 지원되지 않습니다. 다음과 같은 지시문이 주어진 경우
#pragma include_alias( "one.h", "two.h" )
#pragma include_alias( "two.h", "three.h" )
#include "one.h"
컴파일러는 .가 아닌 three.h
파일을 two.h
검색합니다.