#ifndef与#pragma once都用于避免同一个.h头文件被include多次。
.h头文件头文件一般包含函数定义,变量定义等,多次#include则会在导致重定义错误。
1.#ifndef用法:
来自CODE的代码片
example.h
第一次include该.h文件的时候,由于宏_EXAMPLE_H没被定义,
#ifndef _EXAMPLE_H
语句为真,将执行
#define _EXAMPLE_H
语句与其后的
example.h文件内容
。
当再次include该.h文件时,由于第一次已经定义了_EXAMPLE_H,故将跳过定义_EXAMPLE_H与执行example.h
文件内容步骤。这样便可以避免多次include同一.h文件导致的多重定义错误。
2.#pragma once用法:
3.#ifndef与#pragma once的区别:
- #ifndef:依赖于宏名不冲突,如示例中的_EXAMPLE_H这个宏,这种方法可以保证同一内容文件不会被包含多次。但,如果宏_EXAMPLE_H在其他文件中被定义的话,也就是发生冲突了,就会导致该.h文件存在,但编译器找不到的错误。
- #pragma once:能保证同一文件不被include多次,不能保证同一内容文件不被多次include,如将example.h文件的里一份拷贝命名为examplecopy.h,虽然则这两个文件内容相同,但#pragma once不能保证其不被同时include.
- 推荐使用#ifndef。
#pragma once编译器相关,受编译器限制
推荐使用#ifndef
转载自:http://blog.csdn.net/lovecodeless/article/details/23366255