我正在学习C并希望有人能解释使用#ifndef
的逻辑是什么?使用预处理器的提示#ifndef
我也看到很多我看过的C程序,人们似乎遵循#ifndef
,#define
和#endif
之后的文件名。有没有关于如何选择这个名字的规则或提示?
#ifndef BITSTREAM_H
#define BITSTREAM_H
#include <stdio.h>
#include <stdint.h>
/*Some functions*/
#endif
我正在学习C并希望有人能解释使用#ifndef
的逻辑是什么?使用预处理器的提示#ifndef
我也看到很多我看过的C程序,人们似乎遵循#ifndef
,#define
和#endif
之后的文件名。有没有关于如何选择这个名字的规则或提示?
#ifndef BITSTREAM_H
#define BITSTREAM_H
#include <stdio.h>
#include <stdint.h>
/*Some functions*/
#endif
您要查找的术语是预处理器指令。
#ifndef
不需要跟一个文件名,例如,它经常可以看到#ifdef WINDOWS
或#ifndef WINDOWS
等
哦,我明白了。感谢David Heffernan,为我添加了逃生。跳过了 – tamarintech 2011-04-05 18:40:39
#ifndef
装置“如果没有定义”。它通常用于避免文件的多个include
。
Tom Zych:“头文件通常会使用这样的逻辑来避免被多次包含。”
这是真的,但它确实只对“公共”标题是必需的,比如库函数的标题,在这里你不能控制标题的包含方式。
这个技巧对于项目中使用的标题是不必要的,这些标题可以控制项目的包含方式。 (如果公共标题之外有它们的用途,这不是常见的)。
如果您避免在“私人”标题中使用它们,那么您将更有可能以较不随意的方式包含标题。
你发布的那个,特别是,叫做Include Guard。
[C#头文件的最佳做法#ifndef #define #endif]的可能重复(http://stackoverflow.com/questions/2939368/best-practice-on-c-header-files-with-ifndef -define-endif) – nos 2011-04-05 19:16:42