我经常发现文件的标题部分一直变得越来越大但它永远不会变小.在源文件的整个生命周期中,类可能已经移动并被重构,很可能有很多#includes
不需要在那里再存在.将它们留在那里只会延长编译时间并增加不必要的编译依赖性.试图弄清楚哪些仍然需要可能是相当繁琐的.
是否有某种工具可以检测多余的#include指令并建议哪些可以安全删除?
lint可能这样做吗?
我正在研究Visual Studio 2008中的一个大型C++项目,并且有很多文件带有不必要的#include
指令.有时#include
s只是工件,一切都会被删除,但是在其他情况下,类可以向前声明,#include可以移动到.cpp
文件中.是否有任何好的工具可以检测这两种情况?
我有一个Visual Studio项目,包含大约60个C++源文件.我可以做一个构建,它完成没有错误.但如果我再次立即点击F7,它总是会重新编译大约50个源文件.它不会重新编译所有文件,这很奇怪.
我有'启用最小重建'(/ Gm)设置.有什么想法可能会这样做吗?这些文件以后都没有修改日期.
我已经看到了相当一致的意见,实现文件(的.cc /的.cpp)应包括其对应的类定义文件第一个,包括其他头文件之前.但是当主题转移到头文件本身,以及它们包含的包含顺序时,建议似乎有所不同.
Google编码标准建议:
目前尚不清楚上述第1项和第5项之间的差异,以及选择其中一个或另一个地点的原因.也就是说,另一个在线指南建议这个顺序(在该文档的"类布局"部分中找到):
再次出现歧义,这次是第2项和第3项之间的区别.有什么区别?那些代表项目间和项目内部是否包括?
但更重要的是,看起来两个提议的编码标准都建议最后包含"你的"头文件.这些建议与实施文件中包含排序的建议相反,并不直观.将"你的"头文件始终列在第一位 - 在系统和第三方标题之前是否没有意义?
我已经用C++工作了好几周了,但是头文件(或者我认为的链接器)背后的机制让我感到困惑.我已经习惯于创建一个"main.h"来分组我的其他头文件并保持main.cpp整洁,但有时这些头文件抱怨无法找到不同的头文件(即使它已声明在"main.h"中.我可能没有很好地解释它,所以这是我正在尝试做的简略版本:
//main.cpp
#include "main.h"
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
-
//main.h
#include "player.h"
#include "health.h"
#include "custvector.h"
Run Code Online (Sandbox Code Playgroud)
-
//player.h
#include "main.h"
class Player {
private:
Vector playerPos;
public:
Health playerHealth;
};
Run Code Online (Sandbox Code Playgroud)
-
//custvector.h
struct Vector {
int X;
int Y;
int Z;
};
Run Code Online (Sandbox Code Playgroud)
-
//health.h
class Health {
private:
int curHealth;
int maxHealth;
public:
int getHealth() const;
void setHealth(int inH);
void modHealth(int inHM);
};
Run Code Online (Sandbox Code Playgroud)
我不会包括health.cpp,因为它有点冗长(但确实有效),它确实有#include "health.h"
.
无论如何,编译器(Code :: Blocks)抱怨"player.h"找不到类型'Health'或'Vector'.我认为,如果我使用#include "main.h"
"player.h",它将能够找到定义Health
并Vector
感觉它们包含在"main.h"中.我想他们会按照自己的方式进行隧道(player.h - …
可能重复:
C++标题顺序
// Here is module This.cpp
#include <boost/regex.hpp>
#include <iostream>
#include <math.h>
#include "mystring_written_by_c.h"
#include "mystring_written_by_cpp.h"
#include <list>
#include <string>
#include <stdio.h>
#include "stdafx.h" // for precomp
#include <tchar.h>
#include "This.h"
#include <Windows.h>
#include <Winsock2.h>
Run Code Online (Sandbox Code Playgroud)
它们现在按字母顺序排列.
我找到了订购它们的最佳做法.(有一个很好的配方吗?)
你将如何订购这些头文件?为什么?
c++ ×6
include ×4
dependencies ×3
c ×2
header ×2
header-files ×2
coding-style ×1
file ×1
rebuild ×1
refactoring ×1
windows ×1