2017-01-15 14 views
2

"ICT_TOOLS_H__"은 무엇입니까? 내가 여기에서 정의하고있는 헤더인가, 또는 boolean인가, 1 또는 0의 int인가? 이름이 헤더 파일과 같거나 사용자 정의 이름 일 수 있습니까? 또한 헤더가 여러 .cpp 파일에 포함되어 있으면 #ifndef를 사용합니까? 아니면 한 번만 #included 한 경우에도 사용해야합니까? 컴파일러가 처음으로 통과 할 때 "ICT_TOOLS_H__"이 정의되고 다른 모든 패스에서 헤더를 다시 컴파일하지 않아 동일한 헤더의 여러 컴파일을 방지합니까? 이 매크로가 정의되지 항상 처음되도록 조건이 성공하고 콘텐츠 (포함) 소스/헤더에 추가되고, 두번째 너무#ifndef를 사용할 때 특별히 정의되는 것은 무엇입니까?

#ifndef ICT_TOOLS_H__ //my proff said to start the name with "ICT_", its the programming department 
#define ICT_TOOLS_H__ 


//implementation goes here 

#endif 
+1

이들은 경비원을 포함합니다. 참조 : https://en.wikipedia.org/wiki/Include_guard –

+0

전처리 토큰입니다. "전 처리기"를 찾으십시오. –

답변

1

더 그것은 inclusion guard 조건부 포함하기 위해 사용되는 매크로이다없는 조건이 실패하여 내용이 다시 추가되지 않습니다.

헤더가 두 번 이상 포함될 수있는 여러 소스/헤더 파일이있는 경우에 유용합니다.

//header.h 

#ifndef MY_HEADER_H // the name can be anything 
#define MY_HEADER_H 
// code here (some declarations) 

int value; 

#endif 

//source.cpp 

#include "header.h" 
#include "header.h" 

int main() 
{ 
    value = 0; // for example 

    return 0; 
} 

당신이 그렇게 결과 및 그 컴파일 시간 오류 (재정이)가 있습니다 value 두 변수를 다음 header.h의 내용이 두 번 추가됩니다 포함 가드를 제거합니다.

+0

그래서 포함 된 것이 두 번 이상이라면 #ifndef를 사용해야합니까? 아니면 #ifndef를 사용하는 것이 더 나은 방법이라고 생각하십니까? – Selim

+0

헤더 파일에는'inclusion guard '를 사용하는 것이 좋지만 헤더의 맨 위에 추가하는 프로세서 전처리 지시문'#pragma once'가 있습니다. 그러면 내용이 한 번만 추가 될 것입니다. 그러나 pragma는 없습니다. 가지고 다닐 수 있는. – Raindrop7

+1

항상 알아둬야 할 것은'_'을 사용하여 포함 가드 매크로를 시작하지 않거나'#define _WIN32'와 같은 시스템 매크로 중 하나를 사용하는 것입니다 – Raindrop7

0

기본적으로 매크로이며 조건부 컴파일에 사용됩니다. 이것은 사용자가 정의한 매크로가있는 경우 컴파일을 먼저 수행하는 방법입니다 ICT_TOOLS_H__ 정의되지 않은 경우 #ifndef와 #endif 사이의 전체 코드가 컴파일되고 다음 줄에서 해당 매크로를 정의한다는 것을 나타냅니다. 그것을 다시 컴파일하지 않는 경비원이 될 것입니다.

코드가 두 번 이상 컴파일되면 C++ 정의 규칙이 위반됩니다. 여기 https://en.m.wikipedia.org/wiki/One_Definition_Rule을 참조하십시오.