当前位置:  开发笔记 > 编程语言 > 正文

清理旧版代码"标头意大利面条"

如何解决《清理旧版代码"标头意大利面条"》经验,为你挑选了2个好方法。

任何推荐的清理"标头意大利面条"的做法都会导致编译时间极慢(Linux/Unix)?

与GCC有"#pragma once"等价吗?
(发现有关此事的相互矛盾的消息)

谢谢.



1> Assaf Lavie..:

假设你熟悉"包含警卫"(标题开头的#ifdef ......),另外一种加快构建时间的方法是使用外部包含警卫.它在" 大规模C++软件设计 "中进行了讨论.这个想法是经典包括守卫,不像#pragma一次,不要让你从第二次开始忽略头部所需的预处理器解析(即它仍然需要解析并寻找包含守卫的开始和结束.外部包含警卫你将#ifdef放在#include线本身周围.

所以它看起来像这样:

#ifndef MY_HEADER
#include "myheader.h"
#endif

当然在H档案中你有经典的包括后卫

#ifndef MY_HEADER
#define MY_HEADER

// content of header

#endif

这样,myheader.h文件甚至不被预处理器打开/解析,它可以在大型项目中节省大量时间,特别是当头文件位于共享远程位置时,就像它们有时一样.

再次,这一切都在那本书中.心连心



2> Richard..:

如果你想做一个完整的清理并有时间去做,那么最好的解决方案是删除所有文件中的所有#includes(除了显而易见的,例如abc.cpp中的abc.h)然后编译项目.添加必要的前向声明或标题以修复第一个错误,然后重复,直到您干净利落.

这不会解决可能导致包含问题的潜在问题,但它确实确保只包含必需的包含问题.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有