有关使用预处理器#ifndef的提示

时间:2011-04-05 18:32:50

标签: c

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

我也找到了很多我看过的C程序,人们似乎遵循#ifndef#define#endif之后使用文件名的约定。关于如何选择这个名称有什么规则或提示吗?

#ifndef BITSTREAM_H
#define BITSTREAM_H

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

/*Some functions*/

#endif

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

您发布的内容特别称为Include Guard

答案 2 :(得分:1)

您正在寻找的术语是预处理器指令。

#ifndef不需要后跟文件名,例如,#ifdef WINDOWS#ifndef WINDOWS等常见。

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

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

这是正确的,但实际上只需要“公共”标题,例如库函数的标题,您无法控制标题的包含方式。

对于您可以控制事物包含方式的项目中使用的标头,这个技巧是不必要的。 (如果在公共标题之外使用它们,则不常见)。

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