首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

#pragma once 與 #ifndef:頭文件防重複包含的兩種方式

     編輯:關於C語言

兩種寫法對比

方式代碼示例
#ifndef
#ifndef __MY_HEADER_H__
#define __MY_HEADER_H__
// 宣告內容
#endif
#pragma once
#pragma once
// 宣告內容

核心差異

  • #ifndef:依賴宏名稱唯一性。同一文件不會重複包含;內容相同的不同文件也會被視為重複而阻擋。缺點:宏名衝突會導致「明明有文件卻找不到宣告」。
  • #pragma once:由編譯器保證「同一物理文件」不會被包含多次。優點:無需想宏名,避免衝突。缺點:多份拷貝的同名文件會被重複包含(但重複包含較易發現修復)。

移植性與實踐

  • #ifndef 由語言標準支援,移植性最好。
  • #pragma once 主流編譯器(MSVC, GCC, Clang)均支援,現代項目常直接使用。
  • 系統頭文件(如 stdio.h)常雙重保護:
    #if _MSC_VER > 1000
    #pragma once
    #endif
    #ifndef _INC_STDIO
    #define _INC_STDIO
    ...
    

建議

  1. 新項目優先 #pragma once,簡潔無衝突。
  2. 需極致移植性(如跨嵌入式編譯器)時用 #ifndef,並規範宏命名規則(如項目前綴 + 路徑哈希)。
  3. 不要混用:同一文件二選一即可。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved