有和没有INCLUDED_HEADERNAME_H定义标头之间有什么区别

时间:2018-08-09 20:52:27

标签: c++

所以我要清理别人写的一些代码,偶然发现一些我不完全理解的标头相关定义。

例如,根据我的经验,在定义我自己的头文件时,以下始终是首选语法...

#ifndef SOMEFILE_H
#define SOMEFILE_H

但是,当我浏览这段代码时,我看到的东西有些相似,但是却截然不同...

#ifndef  INCLUDED_SOMEFILE_H
#define  INCLUDED_SOMEFILE_H

包含部分有什么作用?程序员在什么情况下想使用更高的格式?

1 个答案:

答案 0 :(得分:1)

  

包含部分有什么用途?

它有助于避免名称冲突。这些包含防护中使用的标识符没有什么不可思议的。您需要的是一致性。要求基本上是:

  1. #ifndef#define使用相同的标识符。
  2. 请勿在程序中的其他任何地方使用该标识符(注释之外-在第三位使用合理的约定:在#endif行上使用注释)。

第一个要求是您(可能)困惑的来源。您可能以为标识符必须是全部大写的文件名,并用下划线代替句点。不是这样绝对可以使任何标识符起作用。您甚至可以使用类似的

#ifndef I_LIKE_SEE_PLUS
#define I_LIKE_SEE_PLUS

但是不推荐,因为它会引起程序员的困惑(强调那些回答此问题的人)。

第二个要求大概是有人在您查看的代码中使用“ INCLUDED_”的原因。该编码器可能在命名约定下工作,在该命名约定中,每个包含保护标识都以“ INCLUDED_”开头,而没有其他标识以该标识开头。根据该约定,几乎没有在其他地方意外使用包含保护标识的可能性。

话虽这么说,但这种惯例可能是过大的。一种更简单且通常有效的约定是指定包含保护标识符的结尾:“ _H”或“ _HPP”或您的文件命名约定指定的任何约定。相比过大的杀伤力,更可能是偶然违反了这一约定,但仍然不是很可能。

  

程序员在什么情况下想使用更高的格式?

为您的项目选择一个约定并坚持下去。使用对您(和您的团队,如果有的话)有用的东西。