一、作用
两者都是为了避免同一个头文件被包含多次。
二、常规使用
1、#pragma once
#pragma once
...... ...... //声明、定义语句
2、#ifndef
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
...... ...... //声明、定义语句
#endif
三、各自的优缺点
1、pragma once的优缺点
1)优点:
一般由编译器提供保证,同一文件(指物理上的一个文件,而不是内容相同的两个文件)不会被包含多次;同时也不会有宏冲突,也可提供编译速度。
2)缺点:
某个文件多份拷贝,不能保证不被重复包含,并且不受老编译器支持,不支持跨平台,移植性差。
1、#ifndef的优缺点
1)优点:
受C/C++语言标准支持,不受编译器限制,移植性好。不仅保证同一文件不会被包含多次,也能保证内容相同的两个文件(或代码片段)不会包含多次。
2)缺点:
不同头文件中的宏名一样的话,可能导致你看到头文件明明存在,但编译器报找不到声明的错误。由于编译器每次都需要打开头文件才能判定是否重复定义,因此编译时间会较长。