Bee*_*ope 5 c performance c-preprocessor
在现代编译器上,在头文件的开头放置注释是否有任何有意义的缺点?
也就是说,类似于以下内容great_header.h:
/*
* this file defines the secret to life
* etc
* (c) 2017 ascended being
*/
#pragma once
#ifndef NAMESPACE_GREAT_HEADER_H_
#define NAMESPACE_GREAT_HEADER_H_
... (actual contents)
#endif // ifndef NAMESPACE_GREAT_HEADER_H_
Run Code Online (Sandbox Code Playgroud)
在过去,我记得一些注意事项,例如" #pragma once只有它是文件中的第一行",以及包含保护优化的类似规则 - 但我不确定是否仍然如此.这对我来说很方便,对于自动化工具来说,如果注释可能是文件中的第一件事,那么它会提取标题信息.
根据GCC Preprocessor Internals手册,多重包含优化机制不受评论的影响:
多重包含优化
在什么情况下这样的优化有效?如果第二次包含该文件,则只有在包含将导致没有要返回的标记且没有相关的指令要处理时才能对其进行优化.因此,目前的实施规定了要求并作出如下的一些补贴:
- 控制
#if-#endif对之外必须没有令牌,但 允许使用空格和注释.
它没有提到#pragma once那里,我怀疑它是分开处理的.参考2.5包装器的替代品#ifndef:
另一种防止头文件被多次包含的方法是使用'
#pragma once'指令.如果#pragma once在扫描头文件时看到' ',则无论如何都不会再次读取该文件.