看了看 #ifndef 和#pragma once 的區別


  剛開始學習程序的時候,老師就說過用#ifndef 這樣的結構防止頭文件被重復包含,所以就沒有關心那么多。今天可能由於自家底層系統緣故,陳工說最好還是用#pragma once ,於是查了下兩個的區別,看了下大神們的博客,所以在此給自己記錄下。

  兩種方式的使用

  其一:

#ifndef _AICHANNELSET_H_
#define _AICHANNELSET_H_
  函數聲明 #endif

   其二:

#pragma once
函數聲明

  第一點ifndef是通過判斷宏是否被定義,來決定該文件是否需要被編譯器包含編譯,一般宏的命名方式都是 _+文件名(大寫)+_H_這樣的形式,如果沒有define,那么就define一次好了,記得之前寫程序的時候很多時候都會忘記在最后加上#endif這個語句。有一個比較關鍵的地方就是這個宏千萬不能再別處定義,如果不小心在其他地方定義了,那就很簡單了,該文件沒有被包含嘛,程序會出現變量未聲明等錯誤。通過在網上查詢,有一種解釋就是,編譯器在執行編譯的時候都需要打開這個文件,然后判斷該文件是否被define 過,如果是大型工程的話,編譯過程就會很花費時間。而#pragma once 不同,它是編譯器來提供保證,它的判斷機制是物理上的文件是否相同,而不是內容相同的兩個文件,這樣就省去了重復打開文件操作。所以推薦使用#pragma once 這種寫法。

  第二點就是#ifndef 是c/c++的標准,所以走到哪里都會被支持,而#pragma once 是#ifndef 之后產生的 一些老的編譯器可能不被支持。不過現在做開發很少人用Turbo C  或者vc 6 了吧。所以基本不存在什么問題。

  第三點還有一種寫法就是兩者可以同時使用,像這樣。但是也沒查到也不清楚這樣寫有什么好處

 

#pragma once 
#ifndef _AICHANNELSET_H_
#define _AICHANNELSET_H_
#endif

 

  第一次寫,再接再勵!

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM