Kos*_*mos 3 c++ include duplicates
这听起来很奇怪,但也许存在一个...我用Google搜索,但没有找到任何东西.
简单的例子:
我有一个文件class1.h:
#include "a.h"
#include "b.h"
Run Code Online (Sandbox Code Playgroud)
另一个文件class2.h:
#include "a.h"
#include "c.h"
Run Code Online (Sandbox Code Playgroud)
和main.cpp:
#include "class2.h" //as we see here, we getting "a.h" double included by class1.h and class2.h
Run Code Online (Sandbox Code Playgroud)
我想在我的项目中摆脱这种欺骗.
当然,在例子中并没有那么难,但我有大量的文件,它们在很多方面相互包含,很难自己追踪所有的欺骗.
在我自己编写该工具之前,有什么建议吗?:)
正如我所看到的,如果文件中的代码依赖于其他要声明的东西,它应该包含包含这些声明的文件.否则,东西变得脆弱,包括必须一直按照一定的顺序完成,这一切都变得丑陋.所以对我来说,"重复包含"是一件好事; 每段代码都可以轻松处理自己的依赖关系.
至于如何防止重复包括......有一个叫做"包括警卫"的成语.他们看起来像这样......
(file1.h)
#ifndef FILE1_H
#define FILE1_H
(the meat of file1.h goes in here)
#endif
Run Code Online (Sandbox Code Playgroud)
当第一次包含此文件时,FILE1_H尚未定义(或者不应该定义,假设您为文件选择比此更好的名称),因此代码将被包含(并FILE1_H随后被定义).但是,下次包含它时,FILE1_H现在已定义,因此代码将被跳过.
(顺便说一句,任何宏名称都适用于此,只要它对每个文件都是唯一的.但是这个特殊约束是宏名称几乎总是基于文件名的最大原因.)
在大多数编译器上,#pragma once也可以.但它不是标准的; 如果你关心能够使用你想要的任何编译器,那么就不要使用它(或者除了包含防护之外还使用它).
| 归档时间: |
|
| 查看次数: |
1986 次 |
| 最近记录: |