C 使用预处理器ifndef的技巧

C 使用预处理器ifndef的技巧,c,C,我正在学习C,希望有人能解释一下使用#ifndef的逻辑是什么 我还找到了许多我看过的C程序,人们似乎遵循一种惯例,在\ifndef、\define和\endif之后使用文件名。关于如何选择这个名字有什么规则或提示吗 #ifndef BITSTREAM_H #define BITSTREAM_H #include <stdio.h> #include <stdint.h> /*Some functions*/ #endif \ifndef比特流 #定义比特流 #包

我正在学习C,希望有人能解释一下使用
#ifndef
的逻辑是什么

我还找到了许多我看过的C程序,人们似乎遵循一种惯例,在
\ifndef
\define
\endif
之后使用文件名。关于如何选择这个名字有什么规则或提示吗

#ifndef BITSTREAM_H
#define BITSTREAM_H

#include <stdio.h>
#include <stdint.h>

/*Some functions*/

#endif
\ifndef比特流
#定义比特流
#包括
#包括
/*一些功能*/
#恩迪夫

您要查找的术语是预处理器指令


#ifndef
不需要后跟文件名,例如常见的是看到
#ifdef窗口
#ifndef窗口
等。

#ifndef
表示“如果未定义”。它通常用于避免一个文件包含多个
文件。

头文件通常会使用这样的逻辑来避免被包含 不止一次。源文件第一次包含它们时,名称 没有定义,所以它被定义,其他事情也完成了。 随后,名称被定义,因此所有这些都被跳过。

Tom Zych:“头文件通常会使用这样的逻辑,以避免被多次包含。”

这是真的,但它实际上只适用于“公共”头,如库函数的头,在这些头中您无法控制如何包含头

对于项目中使用的标题,如果您可以控制如何包含内容,则不需要使用此技巧。(如果它们在公共头之外有用途,那就不是常见的)


如果您避免在“私有”标题中使用它们,则更有可能以不太随意的方式包含标题。

尤其是您发布的标题称为。

哦,我明白了。谢谢David Heffernan为我添加转义符。跳过了,但仍在进行词汇分析。当然,它还能找到
#endif
?如果有
#endinput
指令(如TeX中的指令),可能会有所不同。然后您可以编写
#ifdef BITSTREAM#u H#endinput#endif
(当然,每行一个指令)。可能重复