2017-04-11 4 views
0

J'ai ces fichiers qui m'ont été donnés pour résoudre et j'ai quelques doutes au sujet de la garde d'en-tête.Comment vérifier si la garde d'en-tête est définie

  1. En testGuards.h, il y a une définir comme __HEADER_GUILD_SAFEBOX__, mais le #ifdef demande si __GUILD_SAFEBOX__ est défini, donc je ne sais pas si ce #ifdef devrait poser des questions sur __HEADER_GUILD_SAFEBOX__ au lieu de __GUILD_SAFEBOX__.

  2. En testCpp.h je demande si __GUILD_SAFEBOX__ est déjà défini, mais, pour autant que je sais, il est déjà défini dans testGuards.h, mais ici (en cpp), nous entrons jamais dans le #ifdef, et je sais pas, comment savoir si n'est pas défini, et s'il n'est pas défini, alors définissez-le.

J'ai 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

Les identificateurs (y compris les noms de macro) contenant un double trait de soulignement sont [réservés à la mise en œuvre] (htt p: //stackoverflow.com/a/228797/501250) (compilateur et bibliothèque standard). ** Vous ne devriez pas les utiliser. ** – cdhowie

+0

Je pense que vous n'êtes pas censé mettre stdafx.h ailleurs que la première ligne du fichier –

+0

@cdhowie Merci beaucoup, est très utile pour moi, j'ai tout lu. J'ai changé __HEADER_GUILD_SAFEBOX__ pour __GUILD_SAFEBOX_H et fonctionne bien. – Alejoo

Répondre

0

Vous pouvez imprimer un message, comme un en-tête est inclus. Après cela, vous pouvez vérifier manuellement/automatiquement ce que vous voulez.

Suivre ce answer:

La directive d'avertissement est probablement le plus proche, vous aurez, mais il est pas tout à fait plate-forme indépendante:

#warning "C Preprocessor got here!" 

AFAIK cela fonctionne sur la plupart des compilateurs sauf MSVC, sur lequel Vous devez utiliser une directive pragma:

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

Je l'ai utilisé, mais au début cela n'a pas fonctionné, parce que je n'ai jamais vraiment bien défini l'en-tête. – Alejoo