#define의 범위는 무엇입니까?#define의 범위는 무엇입니까?
저는 C/C++ 용 #define의 범위에 관한 질문을 가지고 있으며 전 처리기를 이해하려고 노력하고 있습니다.
여러 소스 및 헤더 파일을 포함하는 프로젝트가 있다고 가정 해 보겠습니다. 이제 나는 다음이 헤더 파일이 있다고 가정 해 봅시다 :
// header_file.h
#ifndef __HEADER_FILE
#define __HEADER_FILE
#define CONSTANT_1 1
#define CONSTANT_2 2
#endif
하자 그때 두 개의 소스 다음과 같은 순서로 컴파일 된 파일이 있다고 가정 : 내가 포함 한 가정
// source1.c
#include header_file.h
void funct1(void)
{
int var = CONSTANT_1;
}
// source2.c
#include header_file.h
void funct2(void)
{
int var = CONSTANT_2;
}
를 필요한 모든 다른 오버 헤드,이 코드는 잘 컴파일해야합니다. 그러나 컴파일 사이에 #define이 기억되는지 궁금합니다. 위의 코드를 컴파일 할 때 각 #include의 내용이 실제로 포함 되었습니까? 아니면 포함 된 가드가 실제로 구현 되었습니까?
TLDR : #define은 하나의 컴파일 단위에서 다음 컴파일 단위까지 이어질 수 있습니까? 아니면 #define은 하나의 컴파일 유닛에만 존재합니까?
내가 입력 할 때, 나는 내 자신의 질문에 대답하고 있다고 믿고, 나는 믿어지는 대답을 말할 것이다. #define은 단일 컴파일 단위 (.c)로 제한됩니다. 전처리 기는 하나의 컴파일 단위에서 다음 컴파일 단위로 넘어갈 때 기본적으로 모든 #define을 잊어 버립니다. 따라서 위에 열거 한 예에서는 포함 된 경비원이 출현하지 않습니다. 이 신념에서 나는 맞습니까?
TL/DR :'#define '은 각 컴파일 단위에서 아래쪽으로 정의 된 지점에서'# undef'-ed까지 볼 수 있습니다. –
[C에서 # 선처리 프로세서의 범위] (http://stackoverflow.com/questions/6379489/scope-of-define-preprocessor-in-c)의 가능한 복제본 –