2017-04-11 89 views
0

我有这些文件给我解决,我对头部防护有些疑问。如何检查是否定义了头部防护

  1. testGuards.h,有这样定义__HEADER_GUILD_SAFEBOX__,但#ifdef询问是否__GUILD_SAFEBOX__定义,所以我不知道这是否#ifdef应该问的关于__HEADER_GUILD_SAFEBOX__代替__GUILD_SAFEBOX__

  2. testCpp.h我问__GUILD_SAFEBOX__已经被定义,但是,据我所知,它是在testGuards.h已经定义,但这里(CPP),我们从来没有进入#ifdef,我不知道,怎么知道如果没有定义,如果没有定义,然后定义它。

我有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非常感谢,对我非常有用,我收获了所有。 我将__HEADER_GUILD_SAFEBOX__更改为__GUILD_SAFEBOX_H并正常工作。 – Alejoo

回答

0

你可以打印一个消息,作为头包含在内。之后,您可以手动/自动检查任何你想要的。

关注这个answer

警告指令可能是你会得到最接近的,但它不是完全独立于平台:

#warning "C Preprocessor got here!" 

AFAIK这适用于大多数的编译器除了MSVC,其上您必须使用编译指示:

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

我用过它,但起初它不起作用,因为我从来没有很好地定义过头。 – Alejoo