#if defined 和 #if ! defined 的用法


背景:MFC初學,頭文件中有

#if !defined(AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_)
#define AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_

// Info : Other content

#endif // !defined(AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_)

注:AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_ 是一個由VC自定義的標識符,你也可以替換成其他的,上面代碼就可以類比為下邊的代碼,看起來是不是清爽很多啊。這是微軟VS的個性化命名

#if !defined(AFX_HELLOMFC_H_)
#define AFX_HELLOMFC_H_

// Info : Other content

#endif // !defined(AFX_HELLOMFC_H_)

 
         
正題:C語言的宏定義
一、#if defined 的作用
因為對於一個大程序而言,我們可能要定義很多常量( 不管是放在源文件還是頭文件 ),那么我們有時考慮定義某個常量時,我們就必須返回檢查原來此常量是否定義,但這樣做很麻煩.
if defined宏正是為這種情況提供了解決方案.舉個例子,如下:

#define a 100

#define b 100

#define v 100

// ^^^^^^

#define s 100

#define da 100

#define af 100

#define a 200 // Here is the key

上面已經定義過一次 a 的值了,因為中間有很多語句,看不到,又忘了有沒有定義,下面又來了一條,把上面的替掉了。這就是問題了!
此時,我們要檢查a是否定義(假設我們已經記不着這點了),或者我們要給a一個不同的值,就加入如下句子:

#if defined a // or #ifdef a

#undef a

#define a 200

#endif

或者

#ifndef a

#define a 200

#endif

上面就是 #if defined 的唯一作用了
 
二、#if ! defined 的作用
#if defined XXX_XXX 
#endif
是條件編譯,是根據你是否定義了XXX_XXX這個宏,而使用不同的代碼。一般.h文件里最外層的
#if !defined XXX_XXX
#define XXX_XXX
#endif
是為了防止這個.h頭文件被重復include
三、其他相關含義

指令 用途
# 空指令,無任何效果
#include 包含一個源代碼文件
#define 定義宏
#undef 取消已定義的宏
#if 如果給定條件為真,則編譯下面代碼
#ifdef 如果宏已經定義,則編譯下面代碼
#ifndef 如果宏沒有定義,則編譯下面代碼
#elif 如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼
#endif 結束一個#if……#else條件編譯塊
#error 停止編譯並顯示錯誤信息

 


免責聲明!

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



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