相关疑难解决方法(0)

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

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

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

c c++ refactoring dependencies include

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

跟踪#include依赖项的工具

有什么好建议吗?输入将是头文件的名称,输出应该是所有文件的列表(最好是树),包括它直接或间接.

c c++ header

170
推荐指数
8
解决办法
7万
查看次数

用于查找未使用的包含标头的工具?

我知道PC-Lint可以告诉你包含但未使用的标题.有没有其他工具可以做到这一点,最好是在Linux上?

我们拥有一个庞大的代码库,在过去的15年中已经看到了大量的功能,但是当功能从一个实现文件移动到另一个实现文件时,很少会删除剩余的#include指令,这一点让我们陷入了相当糟糕的状态.显然我可以去除所有#include指令并让编译器告诉我哪些重新包含,但是我宁愿反过来解决问题 - 找到未使用的指令 - 而不是重建已使用的指令列表.

c++ coding-style header-files

70
推荐指数
4
解决办法
4万
查看次数

清理你的#include语句?

如何在C或C++项目中维护#include语句?似乎几乎不可避免的是,最终文件中的include语句集合不足(但由于项目的当前状态而恰好起作用)或包含不再需要的东西.

您是否创建了任何工具来发现或纠正问题?有什么建议?

我一直在考虑编写一些单独编译每个非头文件的东西,每次都删除一个#include语句.继续这样做,直到达到最小的包含集.

为了验证头文件是否包含他们需要的所有内容,我将创建一个源文件,它所做的只是包含头文件并尝试编译它.如果编译失败,那么头文件本身缺少一个include.

在我创作之前,我想我应该问一下.这似乎是一个普遍的问题.

c++ header file include

28
推荐指数
5
解决办法
1万
查看次数

如何自动查找未使用的#include指令?

通常在编写新代码时,您会发现缺少#include,因为该文件无法编译.很简单,你添加了所需的#include.但是后来你以某种方式重构代码,现在不再需要一些#include指令.如何发现不再需要哪些?

当然,我可以手动删除部分或全部#include行并将其添加回来,直到文件再次编译,但这在包含数千个文件的大型项目中实际上并不可行.有没有可用的工具可以帮助自动化任务?

c

27
推荐指数
1
解决办法
3788
查看次数

C++函数模板特化的可见性

假设我有fileA.h一个声明classA具有模板功能的类SomeFunc<T>().此函数直接在头文件中实现(通常用于模板函数).现在我添加一个专门的实现SomeFunc()(比如for SomeFunc<int>())fileA.C(即不在头文件中).

如果我现在SomeFunc<int>()从其他代码调用(也许还来自另一个库),它会调用泛型版本还是专门化版本?

我现在遇到这个问题,类和函数存在于两个应用程序使用的库中.一个应用程序正确使用专门化,而另一个应用程序使用通用形式(稍后会导致运行时问题).为什么不同?这可能与链接器选项等有关吗?这是在Linux上,使用g ++ 4.1.2.

c++ linux linker templates g++

26
推荐指数
3
解决办法
7465
查看次数

如何在大型C++项目中检测编译时的瓶颈?

我想减少大型C++项目的编译时间.我尝试使用预编译的头文件,接口等.但在我继续之前,我想知道是否有任何工具可以帮助检测为什么编译时间如此之长.有人建议使用pc-lint,我会试一试. 如何在大型C++项目中检测不必要的#include文件? 但是,如果有其他工具可以分析编译时间并讨论任何提高编译速度的提示,请告诉我.提前致谢.

环境:Microsoft Visual Studio C++ 2008或2010.

c++ compiler-optimization visual-studio-2008 visual-studio

21
推荐指数
2
解决办法
3330
查看次数

如何找到编译瓶颈?

如何找到代码的哪些部分需要很长时间才能编译?

我已经在为所有标题使用预编译头文件,它们肯定会提高编译速度.然而,每当我对我的C++源文件进行更改时,编译它需要很长时间(这是CPU /内存绑定,而不是 I/O绑定 - 它都是缓存的).此外,这是相关的连接部分,只是编译部分.

我试过打开/showIncludes,但当然,因为我使用的是预编译的头文件,所以后面没有任何内容stdafx.h.所以我知道只有源代码需要一段时间才能编译,但我不知道它的哪一部分.

我也试过做一个最小的构建,但它没有帮助.也没有/MP,因为它无论如何都是单个源文件.

我可以尝试通过添加/删除源代码来解析源代码并确定哪个部分是瓶颈,但这是一个痛苦而且无法扩展.此外,很难删除某些东西,仍然让代码编译 - 错误消息,如果有的话,几乎立即回来.

有没有更好的方法来弄清楚什么会减慢编译速度?

或者,如果没有办法:是否有任何语言结构(例如模板?)需要花费更长的时间来编译?


我在C++源代码中有什么:

  • 三个(相对较大的)ATL对话框类(包括定义/逻辑).

    它们很可能是原因,但无论如何它们都是程序的核心部分,所以显然每当我更改它们时都需要重新编译它们.

  • 随机单行(或类似小)实用程序函数,例如字节数组到十六进制转换器

  • 对我的头文件中找到的(内联)类的引用.(其中一个头文件是巨大的,但它只使用最少的模板,当然它是预编译的.另一个是TR1 regex- 它很大,但它几乎没用过.)

注意:

我正在寻找技术,我可以更一般地应用这些问题的原因,而不是针对我的特殊情况的具体建议.希望这对其他人也更有用.

c++ compilation visual-studio-2008 visual-c++

14
推荐指数
1
解决办法
1320
查看次数

C++包括文件浏览器

我有一个非常大的项目,其中包含大量复杂的头文件,这些文件都包含在内.它还依赖大量的第三方库.我正在努力理清这个烂摊子,但是我遇到了一些麻烦,因为很多时候我会删除一个#include指令,但却发现它所包含的内容仍然包含在其他文件中.有什么工具可以帮助我理解这个吗?我真的希望能够点击.h文件并询问它(直接或间接)包含哪些CPP文件,以及包含它的路径,同样点击一个cpp文件并询问它.包括h文件(直接和间接).我从来没有听说过这样做的工具,而且一些快速的谷歌搜索没有改变任何东西,但也许我不知道该搜索什么.

c++ include header-files

8
推荐指数
1
解决办法
1826
查看次数

检查冗余包含的头文件

有没有办法找出C/C++源文件中包含的所有冗余头文件?

c c++

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