_headerfile_h名称是什么意思

时间:2019-07-08 05:46:01

标签: c header-files include-guards

我一直在阅读Zed Shaw的“艰难学习C”。在第20章中,作者创建了一个头文件,例如headerfile.h并包含以下行 #ifndef _headerfile_h。我了解#ifndef指令,但不了解_headerfile_h。请解释此_headerfile_h或提及任何资源以查找它。

#ifndef _headerfile_h
#define _headerfile_h

…other material…

#endif /* _headerfile_h */

2 个答案:

答案 0 :(得分:4)

这只是一个唯一的名称,只会由该标头使用,以防止在标头包含两次的情况下出现问题。

请注意,通常不应创建以下划线开头的函数,变量,标记或宏名称。 C11 §7.1.3 Reserved identifiers的一部分说:

  • 所有以下划线开头,大写字母或其他下划线开头的标识符始终保留供任何使用。
  • 所有以下划线开头的标识符始终保留用作普通和标记名称空间中文件范围的标识符。

另请参阅:

,也许还有其他一些。其中一些问题与其他资源有进一步的链接-SO问题和外部链接。

答案 1 :(得分:3)

指令#ifndef检查“参数”是否定义为宏。如果未定义 n中的ifndef代表“ not”),则预处理器将传递直到匹配的#endif的下一个块。

如果定义了宏,则预处理器将跳过该块并将其不传递给编译器。

所以#ifndef _headerfile_h要做的是检查符号_headerfile_h是否定义为宏。

从宏名看来,这似乎是标头include guard的一部分。