我一直在阅读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 */
答案 0 :(得分:4)
这只是一个唯一的名称,只会由该标头使用,以防止在标头包含两次的情况下出现问题。
请注意,通常不应创建以下划线开头的函数,变量,标记或宏名称。 C11 §7.1.3 Reserved identifiers的一部分说:
另请参阅:
__const
) mean in C? extern
to share variables between source files? #include
in headers? .h
" files in C? ,也许还有其他一些。其中一些问题与其他资源有进一步的链接-SO问题和外部链接。
答案 1 :(得分:3)
指令#ifndef
检查“参数”是否定义为宏。如果未定义 (n
中的ifndef
代表“ not”),则预处理器将传递直到匹配的#endif
的下一个块。
如果定义了宏,则预处理器将跳过该块并将其不传递给编译器。
所以#ifndef _headerfile_h
要做的是检查符号_headerfile_h
是否定义为宏。
从宏名看来,这似乎是标头include guard的一部分。