相关疑难解决方法(0)

在C/C++中检测多余的#includes?

我经常发现文件的标题部分一直变得越来越大但它永远不会变小.在源文件的整个生命周期中,类可能已经移动并被重构,很可能有很多#includes不需要在那里再存在.将它们留在那里只会延长编译时间并增加不必要的编译依赖性.试图弄清楚哪些仍然需要可能是相当繁琐的.

是否有某种工具可以检测多余的#include指令并建议哪些可以安全删除?
lint可能这样做吗?

c c++ refactoring dependencies include

272
推荐指数
9
解决办法
9万
查看次数

如何在大型C++项目中检测不必要的#include文件?

我正在研究Visual Studio 2008中的一个大型C++项目,并且有很多文件带有不必要的#include指令.有时#includes只是工件,一切都会被删除,但是在其他情况下,类可以向前声明,#include可以移动到.cpp文件中.是否有任何好的工具可以检测这两种情况?

c++ dependencies header include visual-studio-2008

95
推荐指数
7
解决办法
3万
查看次数

为什么Visual Studio 2008总是重建我的整个项目?

我有一个Visual Studio项目,包含大约60个C++源文件.我可以做一个构建,它完成没有错误.但如果我再次立即点击F7,它总是会重新编译大约50个源文件.它不会重新编译所有文件,这很奇怪.

我有'启用最小重建'(/ Gm)设置.有什么想法可能会这样做吗?这些文件以后都没有修改日期.

rebuild visual-studio

12
推荐指数
3
解决办法
2万
查看次数

包括文件订购策略

我已经看到了相当一致的意见,实现文件(的.cc /的.cpp)应包括其对应的类定义文件第一个,包括其他头文件之前.但是当主题转移到头文件本身,以及它们包含的包含顺序时,建议似乎有所不同.

Google编码标准建议:

  1. dir2/foo2.h(首选位置 - 见下面的详细信息).
  2. C系统文件.
  3. C++系统文件.
  4. 其他库的.h文件.
  5. 你的项目的.h文件.

目前尚不清楚上述第1项和第5项之间的差异,以及选择其中一个或另一个地点的原因.也就是说,另一个在线指南建议这个顺序(在该文档的"类布局"部分中找到):

  1. 系统包括
  2. 项目包括
  3. 当地包括

再次出现歧义,这次是第2项和第3项之间的区别.有什么区别?那些代表项目间和项目内部是否包括?

但更重要的是,看起来两个提议的编码标准都建议最后包含"你的"头文件.这些建议与实施文件中包含排序的建议相反,并不直观.将"你的"头文件始终列在第一位 - 在系统和第三方标题之前是否没有意义?

c++ coding-style include header-files

12
推荐指数
1
解决办法
4336
查看次数

有人可以帮助澄清头文件的工作原理吗?

我已经用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",它将能够找到定义HealthVector感觉它们包含在"main.h"中.我想他们会按照自己的方式进行隧道(player.h - …

c++ header file

6
推荐指数
2
解决办法
3155
查看次数

头文件顺序

可能重复:
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 c++ windows dependencies header-files

3
推荐指数
1
解决办法
2771
查看次数

我应该在什么时候打击#include树

我目前正在开发一个C++项目,而且经常使用模板.现在我不知道我是否应该开始担心更多关于/ 清洗 深厚的#include树木.

删除不需要的包含后,gcc -E在我的.cpp文件上运行C预处理器后的代码大小为:

  • 50%的文件:~40k行,
  • 30%的文件:40k到80k行之间,
  • 20%的文件:80k到180k行之间.

如果这些是大/小线数,是否有一些标准?在什么时候值得更积极地减少#includes?

c++ compiler-construction include

2
推荐指数
1
解决办法
155
查看次数