C 使用预处理器ifndef的技巧
我正在学习C,希望有人能解释一下使用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比特流 #定义比特流 #包
#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
(当然,每行一个指令)。可能重复