預編譯可以防止重複引用或者重複定義
有 #ifndef 和 #if
另一種就是 #pragma once,在檔案第一行加上即可,例如vs2017在新建標頭檔案後都自帶此句
#ifndef 假(未編譯)
執行內容
#endif
#ifndef 真(已編譯)
不執行內容
#endif
和
#if 真
執行內容
#endif
#if 假
不執行內容
#endif
#ifndef 給標頭檔案起個名name
#define name
/*標頭檔案內容*/
#endif
舉例:乙個叫 fun.h 的標頭檔案,被 a 檔案和 b 檔案同時引用,那麼這個 fun.h 這麼寫
/*如果 fun 已經存在(已編譯),就跳過 ,否則編譯*/
#ifndef fun
#define fun
void
hello()
#endif
其實它們裡面還可以包含若干個 #if 或者 #ifndef 結構
例如上面的 fun.h 標頭檔案:
/*如果 fun 已經存在(已編譯),就跳過 ,否則編譯*/
#ifndef fun
#define fun
void
hello()
/*如果 n 已經存在,就定義 m ,否則跳過*/
#if n
#define m 5
#endif
//#if的
#endif
//#ifndef的
JS預編譯 函式預編譯和全域性預編譯
預編譯發生在函式執行前一步 建立ao物件 執行期上下文 找形參和變數宣告,將變數和形參名作為ao 屬性名,值為undefined 將實參值和形參統一 在函式體裡面找函式宣告,值賦予函式體 結果 預編譯過程 函式馬上要執行,但是還沒執行 首先建立ao物件,也就是函式它產生的儲存空間庫 ao,b und...
mysql 預編譯的好處 MySQL的預編譯功能
1 預編譯的好處 大家平時都使用過jdbc中的preparedstatement介面,它有預編譯功能。什麼是預編譯功能呢?它有什麼好處呢?當客戶傳送一條sql語句給伺服器後,伺服器總是需要校驗sql語句的語法格式是否正確,然後把sql語句編譯成可執行的函式,最後才是執行sql語句。其中校驗語法,和編...
預編譯與編譯
一c c 源 從最初的文字變為可執行檔案主要進行三大步 預編譯階段 主要是編譯器執行 文字處理工作,並不會進行語法檢查 主要執行三大類預編譯命令 巨集定義 文字替換功能,將使用了巨集的地方採取巨集定義方式直接展開 條件編譯 文字剪下功能,根據設定的條件選擇性刪除一些 片段 包含檔案 文字插入功能 i...