2017-04-11 6 views
0

Ich habe diese Dateien, die mir gegeben wurden, zu lösen, und ich habe einige Zweifel über Header Guard.Wie überprüfen, ob Header Guard definiert ist

  1. In testGuards.h gibt es eine wie __HEADER_GUILD_SAFEBOX__ definieren, aber die #ifdef fragt, ob __GUILD_SAFEBOX__ definiert ist, so dass ich weiß nicht, ob dies #ifdef sollte etwa __HEADER_GUILD_SAFEBOX__ statt __GUILD_SAFEBOX__ fragen.

  2. In testCpp.h ich fragen, ob __GUILD_SAFEBOX__ bereits definiert ist, aber so weit ich weiß, ist es bereits in testGuards.h definiert, aber hier (in CPP), wir geben nie in die #ifdef, und ich weiß nicht, wie man weiß, ob es nicht definiert ist, und wenn es nicht definiert ist, dann definiere es.

Ich habe 2 Codes.

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

Bezeichner (einschließlich Makronamen), die einen doppelten Unterstrich enthalten, sind [für die Implementierung reserviert] (htt p: //stackoverflow.com/a/228797/501250) (Compiler und Standardbibliothek). ** Sie sollten sie nicht verwenden. ** – cdhowie

+0

Ich denke, Sie sind nicht dazu gedacht, stdafx.h irgendwo anders als die erste Zeile der Datei –

+0

@cdhowie Vielen Dank, ist sehr nützlich für mich, ich readed alle. Ich änderte __HEADER_GUILD_SAFEBOX__ für __GUILD_SAFEBOX_H und funktioniert gut. – Alejoo

Antwort

0

Sie könnten eine Nachricht drucken, als ein Header enthalten ist. Danach können Sie manuell/automatisch prüfen, was Sie wollen.

Folgen dieses answer:

Die Warnung Richtlinie ist wahrscheinlich die nächst Sie erhalten, aber es ist nicht völlig plattformunabhängig:

#warning "C Preprocessor got here!" 

AFAIK funktioniert dies bei den meisten Compilern außer MSVC, auf dem Sie müssen eine Pragma Direktive verwenden:

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

Ich habe es benutzt, aber zuerst hat es nicht funktioniert, weil ich den Header nie richtig definiert habe. – Alejoo

Verwandte Themen