함수 내부와 같이 전역 범위뿐만 아니라 파일의 #include
모든 위치 에서 사용할 수 있습니다 (필요한 경우 여러 번). 물론, 추악하고 좋지 않은 스타일이지만 가능하고 때로는 합리적입니다 (포함하는 파일에 따라 다름). 경우는 #include
오직 다음 한 번 일이없는 것 일이었다. #include
결국 멍청한 텍스트 대체 (잘라 내기 및 붙여 넣기)를 수행하고 포함하는 모든 것이 헤더 파일 일 필요는 없습니다. 예를 들어 #include
, 원시 데이터를 포함하는 자동 생성 데이터가 포함 된 파일을 std::vector
. 처럼
std::vector<int> data = {
#include "my_generated_data.txt"
}
그리고 "my_generated_data.txt"는 컴파일 중에 빌드 시스템에 의해 생성 된 것입니다.
또는 내가 게으르고 / 어리 석고 / 멍청해서 이것을 파일에 넣을 수도 있습니다 ( 매우 인위적인 예) :
const noexcept;
그리고 나는
class foo {
void f1()
#include "stupid.file"
int f2(int)
#include "stupid.file"
};
약간 덜 고안된 또 다른 예는 많은 함수가 네임 스페이스에서 많은 양의 유형을 사용해야하는 소스 파일이 될 것입니다.하지만 using namespace foo;
전역 네임 스페이스를 다른 많은 것들로 오염시킬 수 있기 때문에 전역 적으로 말하고 싶지는 않습니다. 당신은 원하지 않습니다. 따라서 다음을 포함하는 "foo"파일을 만듭니다.
using std::vector;
using std::array;
using std::rotate;
... You get the idea ...
그런 다음 소스 파일에서이 작업을 수행합니다.
void f1() {
#include "foo"
}
void f2() {
}
void f3() {
#include "foo"
}
참고 : 나는 이와 같은 일을 옹호하지 않습니다. 그러나 가능하고 일부 코드베이스에서 수행되며 왜 허용되지 않아야하는지 모르겠습니다. 그것은 않습니다 그 용도가있다.
또한 포함하는 파일이 특정 매크로 ( #define
s) 의 값에 따라 다르게 동작 할 수도 있습니다 . 따라서 먼저 일부 값을 변경 한 후 여러 위치에 파일을 포함 할 수 있으므로 소스 파일의 다른 부분에서 다른 동작을 얻을 수 있습니다.
#ifdefs
. 그래서 당신은 말할 수#define MODE_ONE 1
후#include "has-modes.h"
, 다음#undef MODE_ONE
과#define MODE_TWO 1
와#include "has-modes.h"
다시. 전처리 기는 이러한 종류에 대해 불가지론 적이며 때로는 이해할 수 있습니다.