Q
头文件保护的目的
8
A
回答
14
如果头文件被多次包含,则防护标头可防止出现问题;例如
#ifndef MARKER
#define MARKER
// declarations
#endif
第一次这个文件是#include
-ed,所述MARKER
预处理器符号是未定义的,那么预处理器将定义符号,下面的声明将包括在由编译器看到的源代码。在随后的#include
's上,MARKER
符号将被定义,因此预处理器将删除在#ifnde
/#endif
内的所有内容。
为使此功能正常工作,对于每个可能为#include
-ed的头文件,MARKER
符号需要不同。
这种事情的必要性是因为在编译单元中多次定义一个具有相同名称的类型或函数在C/C++中是非法的。守卫允许一个头文件到#include
其他头文件,而不用担心这可能会导致一些声明被包含多次。
总之,它不防止你#include
连连-ing的文件。相反,它允许你你这样做而不会导致编译错误。
2
标题保护的目的是防止某些代码每个翻译单元只能出现一次的问题。
一个例子是一个结构。即使第二个定义完全相同,也不能重新定义结构。因此,如果您尝试编译以下代码:
struct foo { int x; };
struct foo { int x; };
由于重新定义,编译器将失败。
可能很难保证您只包含一次头(当头包含其他头时会发生这种情况)。如果你的头文件有结构定义,这将导致编译失败。标题守卫是一个简单的技巧,所以即使标题被多次包含,它的内容也只会出现一次。
相关问题
- 1. 保护码头文件系统访问
- 2. C++头文件保护问题
- 3. 如何保护项目的源文件?
- 4. 保护文件
- 5. Outlook Interop:受密码保护的PST文件头疼
- 6. 密码保护IntelliJ中的文件夹/目录 - Maven项目
- 7. 保护Flash文件
- 8. 保护PHP文件
- 9. 保护ELMAH文件
- 10. 保护Flash文件
- 11. Tomcat保护文件
- 12. 保护p12文件
- 13. 保护cron文件
- 14. 保护excel文件
- 15. 保护Apk文件
- 16. ExpressJs不保护/跳过受保护的文件
- 17. 保护Symfony2中的目录
- 18. 无关的“保护”条目
- 19. 不可能在zip文件中保护受版权保护的文件?
- 20. 的.htaccess密码保护的文件和
- 21. 哪里可以存储软件保护的保护试用信息目的
- 22. 保护Java数据(将项目保存到安全文件)?
- 23. 确保码头工人守护在脚本文件
- 24. 的Java listFiles显示Boot目录等“保护”文件
- 25. 如何在目录中查找密码保护的pdf文件?
- 26. 在htaccess保护的目录中排除一个文件夹
- 27. 获取有关UAC的所有文件保护目录
- 28. 如何保护包含在www目录中的文件
- 29. 如何保护文件
- 30. PHP + htaccess:保护PDF文件
在C++中接受的术语是“包含警卫”。 – 2011-04-04 07:49:30
维基百科给出了[很好的解释](http://en.wikipedia.org/wiki/Include_guard)如何包括警卫的工作。 – 2010-06-05 06:18:55