#pragma once 的用法


#pragma once

  是寫在頭文件開頭的編譯指令,使得編譯器能夠自動幫我們實現“只編譯一次該頭文件”,從而避免了多次include該頭文件導致的重復定義/聲明問題。

  在沒有#pragma once 之前,我們常用的方法是為這個頭文件制定一個獨一無二的宏名(比如說叫__Car__),然后使用#ifndef:

#ifndef __Car__
#def __Car__

//頭文件中的定義、聲明
//...

#endif //__Car__

 這兩種方法有幾點不同:

  1.較早的編譯器並不支持#pragma once

  2.如果兩個不一樣的頭文件用了同一個宏名,用#ifndef的方法就會出問題,相當於扔掉了一個頭文件

  3.#pragma once 似乎只負責保證聲明的唯一性,並不保證實現的唯一性,具體來講:

#pragma once

class Test
{
    void func();
};

void Test::func()
{
  //do sth.
}

  上面這樣寫的話,有可能出現Test::func()這個函數被定義兩次的問題,而

#pragma once

class Test
{
    void func()
    {
        // do sth.
    }
};   

  這樣寫就沒問題。估計用#ifndef 配合#endif的話也沒問題

  (srds,頭文件里還是不要寫定義了,這里是因為是個OOP的題所以不得不寫在.h里面...)


免責聲明!

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



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