一、作用
兩者都是為了避免同一個頭文件被包含多次。
二、常規(guī)使用
1、#pragma once
#pragma once
...... ...... //聲明、定義語句
2、#ifndef
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
...... ...... //聲明、定義語句
#endif
三、各自的優(yōu)缺點
1、pragma once的優(yōu)缺點
1)優(yōu)點:
一般由編譯器提供保證,同一文件(指物理上的一個文件,而不是內(nèi)容相同的兩個文件)不會被包含多次;同時也不會有宏沖突,也可提供編譯速度。
2)缺點:
某個文件多份拷貝,不能保證不被重復(fù)包含,并且不受老編譯器支持,不支持跨平臺,移植性差。
1、#ifndef的優(yōu)缺點
1)優(yōu)點:
受C/C++語言標(biāo)準支持,不受編譯器限制,移植性好。不僅保證同一文件不會被包含多次,也能保證內(nèi)容相同的兩個文件(或代碼片段)不會包含多次。
2)缺點:
不同頭文件中的宏名一樣的話,可能導(dǎo)致你看到頭文件明明存在,但編譯器報找不到聲明的錯誤。由于編譯器每次都需要打開頭文件才能判定是否重復(fù)定義,因此編譯時間會較長。