防止头文件被重复包含的两种方式:
1.条件编译的宏
2.#pragma once
先来说说第一种:
#ifndef __HEADNAME__H__
#define __HEADNAME__H__
//...
//头文件
#endif
C/C++标准支持#ifndef的方式,当头文件第一次被包含时正常处理 _HEADNAME__H__ 被定为1,当再次包含相同头文件时就会被忽略,但预处理时仍会将头文件读入加长编译时间。_HEADNAME_H__会被改为包含的头文件名。以防冲突。它不但可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被同时包含。。假如宏名相同会引发冲突,找不到声明的问题。
再说说第二种:
//#pragma once
//...
//头文件
#pragma once 也是防止头文件被重复包含,它所指的文件时物理上的一个文件,而不是内容相同的两个文件。但有文件被多份拷贝,不能保证不被重复包含。它受编译器的限制。有的不支持。
二者区别:
宏定义:有先天优势,和标准与生俱来 ,可移植性强。但多要考虑宏名。
#pragma once 头文件只被打开一次,运行效率较高,不用考虑宏名。但受编译器的限制。
珍&源码