关于条件预处理#IF的问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 19:50:54
偶看到一段代码 它把一个#ifndef指令用在头文件中:
//compare.h(头文件的名字是这个,以下是这个头文件的内容)
#ifndef COMPARE_H
#define COMPARE_H

namespace compare{
double max(const double* data, int size);
double min(const double* data, int size);
}
#endif

它说这么做可以确保每个头文件的内容在源文件中不会出现多次。

各位大大能否详细解释下为什么这么做就可以防止头文件内容重复???偶是个菜鸟 希望解释得通俗一些 谢谢~

很简单的例子,你自己可以练习一下
这里只是举例子,你可能会说你不会在a.c中再用#include "compare.h",但是大型软件不可避免的会这样用

/* a.h */
#include "compare.h"

/* a.c */
#include "a.h" /* 这里已经包括了compare.h了 */
#include "compare.h" /* 如果没有那三行,这里就重复了 */

很简单,这个和微软提供的#pragma once一个意思。
因为第一次加入的时候#ifndef就是加入没有宏定义COMPARE_H,则宏定义COMPARE_H 然后执行下面的知道#endif
第二次被引用的时候COMPAR_H已经存在了,则#ifndef检测为假,则不执行下面的部分了。就这么简单。
所以只会导入一次。

#ifndef COMPARE_H
#define COMPARE_H
未被编译过编译过,执行编译;否则,什么都不做。