가 먼저 전원이, #include
이후 다른 어떤에서 실행되는 "컴파일 타임에"A "런타임"헤더 및 확인된다 #ifdef
과 함께 컴파일 시간. #include
은 기본적으로 .cpp 파일의 맨 위에 머리글의 복사 붙여 넣기를 수행합니다. Razvan Cojocaru는 _GLIBCXX_IOSTREAM
날씨를 확인하기 위해 #ifdef
을 사용할 수 있다고 지적했습니다.
class Flagger
{
typedef unsigned long ulong;
public:
Flagger (ulong flags = 0) : f(flags) { ; }
Flagger (const Flagger& cpy) : f(cpy.f) { ; }
void clear (ulong flags) { f &= ~flags; }
void set (ulong flags) { f |= flags; }
void toggle (ulong flags) { f ^= flags; }
bool get (ulong flags) { return f & flags; }
#ifdef _GLIBCXX_OSTREAM
friend std::ostream& operator << (std::ostream &out, const Flagger& f)
{ /* print it how you want it*/ }
#endif
private:
ulong f;
};
그러나
, 이 아마 여러 가지 이유로 나쁜 생각입니다 :
- 가 사용자를 포함한 후 위의 헤더를 포함 할 필요가 여기에이 사용할 수있는 곳의 작은 예입니다 iostream 또는 컴파일러가 함수를 삭제합니다.
- iostream 라이브러리의 제작자가 #define 이름을 변경하기로 결정하면 해당 기능이 삭제됩니다. 마찬가지로 누군가 다른 iostream 버전과 다른 #define 태그를 사용하면 함수가 삭제됩니다.
- 위의 예에서 직접 라이브러리를 포함하는 것은 너무 다릅니다. 무작위 사용자가 라이브러리를 사용하지 않으면 프로그램의 최종 크기가 크게 다르지 않으며 기능이 전혀 변경되지 않습니다.
그래서 기본적으로, 그래 그것은 수하지만 하지 실용적입니다. 특히 장기간 유지 관리가 필요합니다. 이점은 위험보다 중요하지 않습니다. 라이브러리에 직접 질문을 포함 시키십시오.
여기에있는 다른 사람들의 말처럼 우리가 최종 결과가 무엇인지 알면 도움이 될 것입니다. 당신이 이것을 가장 많이 사용하려고 계획하고있는 곳은 더 나은 해결책을 가지고있을 것입니다.
컴파일 전에'# ifdef'가 실행됩니다. 런타임 중에는 확실히 실행되지 않습니다. – chris
문제의 해결 방법 !! 내가 원하는 것은 가능하다 !! – BBeta
예, 헤더가 포함되어 있는지 알 수 있습니다. 소스 파일의 맨 위를보십시오. –