#ifndef方式:
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__ 1 ... ... // 一些聲明語句
#endif
#ifndef的方式依賴于宏名字不能沖突,這不光可以保證同一個文件不會被包含多次,也能保證內容完全相同的兩個文件不會被不小心同時包含。當然,缺點就是如果不同頭文件的宏名不小心“撞車”,可能就會導致頭文件明明存在,編譯器卻硬說找不到聲明的狀況
#pragma方式
#pragma once ... ... // 一些聲明語句
#pragma once 是個預處理指令,在頭文件的最開始加入這條指令表示:這個頭文件只被編譯一次 #pragma once則由編譯器提供保證:同一個文件不會被包含多次。注意這里所說的“同一個文件”是指物理上的一個文件,而不是指內容相同的兩個文件。帶來的好處 是,你不必再費勁想個宏名了,當然也就不會出現宏名碰撞引發的奇怪問題。對應的缺點就是如果某個頭文件有多份拷貝,本方法不能保證他們不被重復包含。當 然,相比宏名碰撞引發的“找不到聲明”的問題,重復包含更容易被發現并修正。
總結: 1. #ifndef 由語言支持所以移植性好,#pragma 可以避免名字沖突