2013-11-21 5 views
1

에서 경비원 나는 이것의 목적에 대한 혼란 스러워요 목적 .c 파일

#ifndef _INCLUDE_GUARDS_C 
#define _INCLUDE_GUARDS_C 

main() 
{ 

} 

function1() 
{ 
} 

#endif 

function2() 
{ 
} 

C

보통 소스 파일의 시작에 같은 코드를 볼 수있다 포함 ..?

인클루드 경비원 헤더 파일에 정의하면 내가 알고 있지만, 이러한 목적은 소스 파일의 경비를 포함 무엇

  1. ? 및

  2. 왜 function2()가 포함 가드 외부에서 정의 되었습니까?

+0

http://en.wikipedia.org/wiki/Include_guard –

+1

헤더 파일 (.h)이 아닌 소스 파일 (.c) – user2798118

+0

에있는이 가드의 목적을 다른 소스의 소스 파일을 포함하는 것을 막을 수있는 방법은 없습니다. 파일, 당신의 P45를 얻는 확률을 제쳐두고. 이러한 경우에는 다중 포함 가드를 사용할 수 있습니다. – Bathsheba

답변

5

C 또는 C++ 비 헤더 소스 파일에 포함 경비를 들일 때 이점이 없습니다.

나는 처음부터 전처리기를 구현하고 사람이 할 수있는만큼 경비원을 연구했으며, 그것은 전혀 무의미합니다.

경비원 밖의 기능은 나에게 불길한 것처럼 보입니다. 또는 때로는 누군가가 마법 주문을 할 때, 그들이 적용되어야 할 때 확실하지 않으므로 무작위로 적용합니다.

+0

전처리 기나 가드를 연구하지는 않았지만 소스 파일에서 경비원을 사용하는 것이 무의미하다고 말할 수 있습니다 (해당 소스 파일을 #include하지 않으면 더 강한 것을 말합니다) . – mah

+0

@mah 여기에는 권위자보다 더 나은 논쟁이있는 것 같지 않습니다. 그리고 그 밖의 어떤 대답도 주석에서 분리하는 것은 거의 없습니다. – Potatoswatter

+0

내가 게시 한 답변 (또는 귀하가 의견보다는 답변으로 게시 한 답변)에 대해 우려를 나타내지 않고 있습니다 ... 오히려 나는이 경우 권위가 특히 유용하다고 느끼지 않는다고 말하고있었습니다. 비유로 하이퍼 볼릭을 사용하려면 3 층 건물에서 수박을 떨어 뜨리면 충격에 튀게 될 것이라고 말하면 나는 당신의 물리학 학위에 대해 듣고 말할 필요가 없을 것입니다. 당신의 말대로 : – mah

0

이전 질문이지만 ...

코드를 테스트 할 때 사용할 수 있다고 생각합니다. 테스트 할 때 헤더에 정의되지 않은 로컬 함수에 액세스해야하므로 .c 파일을 포함합니다 ... 예,보기 흉합니다. 예, 당신은 better options입니다!

헤더에 정의되지 않은 기능의 경우 포함 가드가 필요하지 않습니다.