【问题标题】:#include guard before or after comment block?#include 保护在评论块之前还是之后?
【发布时间】:2018-05-07 05:26:41
【问题描述】:

我在某处读到(抱歉找不到链接了)头文件的第一行应该始终是#include 保护,因为编译器可以在不打开头文件的情况下看到它。因此,如果头文件已经包含在内,它不会打开文件而只是再次关闭它,这会加快构建过程。
但是我总是在每个文件的开头都有一个注释块。所以我的问题是,#include 防护应该写在评论块之前还是之后?

这种风格更好吗:

///////////////////////
// Name:        code.h
// Author:      Me
// Date:        dd.mm.yyyy
// Description: This code executes a specific task
///////////////////////

#ifndef CODE_H_
#define CODE_H_

...

#endif

或者这种风格更好:

#ifndef CODE_H_
#define CODE_H_

///////////////////////
// Name:        code.h
// Author:      Me
// Date:        dd.mm.yyyy
// Description: This code executes a specific task
///////////////////////

...

#endif

或者根本不重要?

【问题讨论】:

  • 如果你真的想保护几纳秒,你必须在第一个可能的地方写! ;) 这样的事情对于所有软件人的生活来说真的很重要。如果这是您遇到的最重要的问题之一,那么您的处境非常好!顺便说一句:编译器无论如何都必须打开文件...包含 gard 没有在其他地方表示。
  • @Klaus 我知道这并不是什么大事,但我只是好奇。 :)
  • 之前。预处理器必须处理的行越少越好。我曾经有一个编译器(Watcom),它可以直接打印出包含的行数,并且始终保持至少 1:100 的比例。
  • 很遗憾你找不到链接,否则我会告诉你从现在开始忽略消息来源所说的一切。也就是说,如果它确实说出了您声称的内容。你很可能记错了。编译器不打开文件就看不到包含保护。他们能做的,而且确实能做的,就是记住某个文件有包含保护,这样他们就可以避免再次打开它。守卫是文件中的第一件事还是跟随一些 cmets 并不重要。

标签: c++ performance compilation header-files include-guards


【解决方案1】:

根据我的经验和others'

是不是文件的解析和读取需要时间,而是各种优化和代码生成过程

因此,对于大型项目的构建时间,打开一个文件来解析包含保护应该可以忽略不计。

我的意思是它不可能成为程序的瓶颈!

所以选择你喜欢的风格,它真的是基于意见的。


发现另一个有趣的评论here:

曾几何时,可能有一两个编译器愚蠢到每次都打开文件来检查包含保护。在这个千年中生产的编译器不会这样做,因为它可以只保留一个文件表并包含守卫并在打开文件之前查阅它。

在File-wide include-guards阅读更多内容。

【讨论】:

  • 问题不在于是否使用包含守卫,它要求在评论块之前或之后。所以优化和代码生成通道在这里不相关。
  • @Klaus 是的,但我的意思是表明解析和读取文件的速度确实足够快,不用担心 OP。你打算如何编辑我的问题?此外,我的回答并不打算回答使用或不使用警卫。我相信它回答了OP的问题。 =)
猜你喜欢
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2013-03-13
  • 2014-08-12
  • 1970-01-01
相关资源
最近更新 更多