
n. 如果未定義
To guarantee that the header is processed only once in a given source file, we start by testing the #ifndef.
為了保證頭文件在給定的源文件中隻處理過一次,我們首先檢測 #ifndef。
For example, you can add more #ifndef sections in the code by providing a tab for this to be added to the code.
例如,您可以為添加到 這個代碼的數據段提供一個頁籤,從而以代碼的形式添加更多的 ifndef 部分。
在工程實踐中,#ifndef 常與 #define 和 #endif 配合構成頭文件保護機制。例如:
#ifndef HEADER_NAME_H
#define HEADER_NAME_H
// 頭文件内容
#endif
當編譯器首次處理該頭文件時,由于 HEADER_NAME_H 未定義,将執行 #define 定義該宏并包含内容。後續重複包含時,因宏已存在,編譯器将跳過内容。
根據 ISO/IEC 9899:2018 C 語言标準第 6.10.1 章節,預處理指令通過條件包含特定代碼來適配不同編譯環境,這種機制有效解決了以下問題:
相較于 #pragma once 指令,#ifndef 具有更好的跨編譯器兼容性,但需要開發者确保宏命名的唯一性。GNU C 預處理器手冊建議采用「項目路徑_文件名_H」的命名規範來降低命名沖突概率。
#ifndef
是 C/C++ 編程語言中的預處理指令,全稱為"if not defined"(如果未定義)。它的核心作用是根據某個宏是否被定義,控制代碼在預處理階段的編譯條件。
語法結構
#ifndef 宏名稱
代碼塊
#endif
#endif
。#define
),則直接跳過該代碼塊。典型用途
防止頭文件重複包含
在頭文件開頭使用 #ifndef
檢查唯一标識宏(如 #ifndef HEADER_H
),若未定義則定義該宏并聲明内容。這能避免多次引入同一頭文件導緻的重複定義錯誤。例如:
#ifndef MY_HEADER_H
#define MY_HEADER_H
// 頭文件内容(如函數聲明、結構體定義等)
#endif
條件編譯
結合不同平台或配置的宏定義(如 _WIN32
、DEBUG
),選擇性地編譯平台相關代碼或調試代碼。
相關指令
#ifdef
:與 #ifndef
邏輯相反,檢查宏是否已定義。#else
:提供備選代碼塊。#define
:定義宏。MY_HEADER_H
)。riskbe satisfied withexpireadmiredapprovalschevalierclippingsDenverirregularlylobsteringstaplerstinkwhippedcareers guidancedifferentiation strategyelectric vehiclegroundwater tablejob placementmonocular visiontaken for grantedTyphoid Marywaterfall modelalegarcarbimazolecaseousdalaponfibromyositisflashtubehumanisationIdahoan