名字_headerfile_h是什么意思

What does the name _headerfile_h mean

我一直在读 Zed Shaw 的 "Learn C The Hard Way"。在第 20 章中,作者创建了一个头文件,例如headerfile.h 并包括该行 #ifndef _headerfile_h。我理解 #ifndef 指令但不理解 _headerfile_h。请对此进行解释 _headerfile_h 或提及任何资源以查找它。

#ifndef _headerfile_h
#define _headerfile_h

…other material…

#endif /* _headerfile_h */

它只是一个唯一名称,仅供 header 使用,以防止 header 被包含两次时出现问题。

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

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

另请参阅:

可能还有其他一些人。其中一些问题与其他资源有进一步的链接——SO 问题和外部链接。

指令 #ifndef 检查 "argument" 是否定义为宏。如果它是定义的(ifndef中的n代表"not"),那么直到匹配的#endif的下一个块被传递由预处理器开启。

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

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

从宏名称来看,这似乎是 header include guard.

的一部分