2017-04-11 10 views
0

해결하기 위해 나에게 주어진이 파일들이 있으며 헤더 가드에 대해 약간의 의문이 있습니다. testGuards.h에서헤더 가드가 정의되어 있는지 확인하는 방법

  1. 는이 __HEADER_GUILD_SAFEBOX__ 같은 정의가 있지만, __GUILD_SAFEBOX__가 정의되어있는 경우 #ifdef 묻는다, 그래서이 #ifdef에 대한 __HEADER_GUILD_SAFEBOX__ 대신 __GUILD_SAFEBOX__의 요청해야하는지 모르겠어요. testCpp.h에서

  2. 방법, __GUILD_SAFEBOX__가 이미 정의되어있는 경우 물어하지만, 지금까지 내가 알고, 이미 testGuards.h에 정의 된, 그러나 여기 (CPP)에, 우리는 결코 #ifdef에 입력되지 않고, 나도 몰라 if가 정의되지 않았는지, 정의되어 있지 않으면 정의하십시오.

코드가 2 개 있습니다.

testGuards.h

#ifndef __HEADER_GUILD_SAFEBOX__ 
#define __HEADER_GUILD_SAFEBOX__ 

#include "stdafx.h" 

#ifdef __GUILD_SAFEBOX__ 
[...] 
#endif 

testCpp.cpp

#include "stdafx.h" 

#ifdef __GUILD_SAFEBOX__ 
#include "../common/tables.h" 
[...] 
#endif 
+2

두 개의 밑줄을 포함하는 식별자 (매크로 이름 포함)는 [구현을 위해 예약 됨] (htt p : //stackoverflow.com/a/228797/501250) (컴파일러 및 표준 라이브러리). ** 당신은 그들을 사용해서는 안된다. ** – cdhowie

+0

나는 당신이 stdafx.h를 파일의 첫번째 줄 이외의 다른 곳에 두려고하지 않는다고 생각한다. –

+0

@cdhowie 고마워, 나에게 매우 유용하다. 나는 모두 읽었다. __GUILD_SAFEBOX_H에 대한 __HEADER_GUILD_SAFEBOX__가 변경되어 정상적으로 작동합니다. – Alejoo

답변

0

헤더가 포함되어 있습니다과 같이 메시지를 인쇄 할 수 있습니다. 그 후에는 수동/자동으로 원하는 것을 확인할 수 있습니다.

에 따라이 answer :

경고 지시자는 아마 당신이 얻을 것이다 가장 가까운이지만, 완전히 플랫폼 독립적이 아니다 :

#warning "C Preprocessor got here!" 

AFAIK이있는, MSVC를 제외하고 대부분의 컴파일러에서 작동

#pragma message ("C Preprocessor got here!") 
+0

머리글을 잘 정의하지 않았기 때문에 처음에는 작동하지 않았습니다. – Alejoo